记一次 easyswoole 热重载失效复盘 grpc扩展惹的祸

首先看一下运行环境

swoole version 4.8.11

php version 7.4.33

easyswoole version 3.4.6

在easyswoole 的入口文件 如下:

php 复制代码
<?php
namespace EasySwoole\EasySwoole;
use App\WebSocket\WebSocketEvents;
use App\WebSocket\WebSocketParser;
use EasySwoole\Component\Process\Manager;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Config;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use \EasySwoole\Component\Di;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');
        // 加载Config下所有配置
        self::loadConfig();
    
    }

    public static function mainServerCreate(EventRegister $register)
    {
        // 热重载监视器
        $hotReloadOptions = new \EasySwoole\HotReload\HotReloadOptions;
        $hotReload = new \EasySwoole\HotReload\HotReload($hotReloadOptions);
        $hotReloadOptions->setMonitorFolder([EASYSWOOLE_ROOT . '/App']);

        $server = ServerManager::getInstance()->getSwooleServer();
        $hotReload->attachToServer($server);
        // websocket注册
        self::InitWebSocket($register);
        // 注册 FastCache缓存
        $register->add($register::onWorkerStart, function (\swoole_server $server, int $workerId) {
          
            
        });
        
    }


    public static function InitWebSocket(EventRegister $register)
    {
        $config = new \EasySwoole\Socket\Config();
        $config->setType($config::WEB_SOCKET);
        $config->setParser(WebSocketParser::class);
        $dispatcher = new \EasySwoole\Socket\Dispatcher($config);
        $config->setOnExceptionHandler(function (
            \Swoole\Server $server,
            \Throwable $throwable,
            string $raw,
            \EasySwoole\Socket\Client\WebSocket $client,
            \EasySwoole\Socket\Bean\Response $response
        ) {
            $response->setMessage('system error!' . $throwable->getMessage());
            $response->setStatus($response::STATUS_RESPONSE_AND_CLOSE);
        });

        $register->set($register::onMessage,
            function (\Swoole\Websocket\Server $server, \Swoole\Websocket\Frame $frame) use ($dispatcher) {
                $dispatcher->dispatch($server, $frame->data, $frame);
            });
        // 注册服务事件
        $register->add(EventRegister::onOpen, [WebSocketEvents::class, 'onOpen']);
        $register->add(EventRegister::onClose, [WebSocketEvents::class, 'onClose']);
    }


  
    /**
     * Description:加载自定义配置文件
     */
    public static function loadConfig()
    {
        Config::getInstance()->loadDir(EASYSWOOLE_ROOT . '/Config');
    }

}

启动服务 命令:

bash 复制代码
php easyswoole server start

此处我监听的是App 目录

当我修改了App目录下任意一个文件 保存后

FileScanner hot reload initialize at Linux in PID 878774

但easyswoole 监听某个目录 不生效了

真的是 我查了半天,包括做减法,只保留easyswoole 框架最小代码,结果还是不行,突然想起前几天编译了php 的一个grpc 的扩展 于是我猜测会不会是php 环境所导致。

于是乎 修改php.ini 去掉grpc.so 的扩展

然后在重启php-fpm 后

重启easyswoole 服务后

修改文件后出现 HOT_RELOAD: reloaded at 1704433881

热重载生效了 到现在还没搞明白啥情况啊 晕了

相关推荐
ESDWAN1 小时前
SD-WAN 主备切换为什么仍然会断网?从检测机制到会话恢复分析
开发语言·php
yunlaodacom3 小时前
腾讯云国际站服务代理商:CVM连接TencentDB失败排查指南
云计算·php·腾讯云
脏脏a4 小时前
延迟与画质:远程控制的生命线
开发语言·php
一条破秋裤4 小时前
SDIO Wi‑Fi 设备的驱动向insmod + 反向rmmod
开发语言·php
weixin_417396835 小时前
星级酒店境外电视频道怎么合法接入?合规要点与核对清单
开发语言·前端·php·1024程序员节·综合布线
4SAPI5 小时前
会议智能处理大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
人工智能·架构·自动化·gateway·php
汤姆宝库7 小时前
具身智能深拆:VLA、世界模型与数据飞轮
开发语言·人工智能·php
云老大-阿里云国际站代理商10 小时前
阿里云国际站渠道代理商:ECS 怎么对接 OSS?权限、域名、网络路径怎么配置?
网络·阿里云·php
昵称画10 小时前
图文:一张十年前的车间系统架构图
低代码·系统架构·php·企业微信·rxjava·零售
tommyjiatong11 小时前
什么是PHP漏洞
开发语言·php