GatewayWorker中修改了调用的控制器代码怎么不重启生效

zjj35

问题描述

Laravel中使用GatewayWorker,在onMessage中调用控制器的方法,每次修改控制器中的方法要重启GatewayWorker才生效,有什么方法能不需要重启GatewayWorker就生效呢

如下每次修改TestController中的方法,需要重启GatewayWorker才生效

public static function onMessage(string $client_id, $message)
{
    try {
        $msg = json_decode($message);
        $op = $msg->op ?? false;

        $controller = new TestController();
        if (method_exists($controller, $op)) {
            $request = new Request($msg['data']);
            $res = $controller->$op($request);
            // ....
        }
    } catch (Throwable $e) {
        echo "Error in onMessage: " . $e->getMessage() . "\n";
    }
}

为此你搜索到了哪些方案及不适用的原因

使用队列、使用app()动态加载都无效

163 4 0
4个回答

10bang

1、只能重启
2、要么改成使用变量的方式传递到 onMessage 来实例化之类的处理

  • zjj35 10天前

    使用变量的方式传递到 onMessage 来实例化,请问这个具体是怎么操作呢,试了很多办法都不行

walkor 打赏

Worker::runAll(); 执行前就载入内存的php文件不支持reload

  • zjj35 9天前

    没有能不重启GatewayWorker就让修改代码生效的方案吗

  • rbb 9天前

    问下ai;再就是热更新试试

  • zjj35 8天前

    ai问了无数次了都无效,有个方法就是用使用自定义命令用artisan执行,效率太低,不适合生产环境频繁请求

efnic

GatewayWorker只用来下发数据,不要用来写复杂的业务逻辑;
所有上行数据,走http请求 Laravel。

  • efnic 7天前

    GatewayWorker ===>>> 用户端或设备端
    用户端或设备端 ===>>> Laravel

https://github.com/walkor/workerman-filemonitor
这里有检测程序示例,会自动检测文件更新自动执行reload加载最新代码。

如果是新项目,建议用wbman配合gateway-worker插件来做,自动更新是现成的,并且支持laravel的的库例如laravel-orm等。

  • 暂无评论
×
🔝