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()动态加载都无效
1、只能重启
2、要么改成使用变量的方式传递到 onMessage 来实例化之类的处理
使用变量的方式传递到 onMessage 来实例化,请问这个具体是怎么操作呢,试了很多办法都不行
Worker::runAll();
执行前就载入内存的php文件不支持reload没有能不重启GatewayWorker就让修改代码生效的方案吗
问下ai;再就是热更新试试
ai问了无数次了都无效,有个方法就是用使用自定义命令用artisan执行,效率太低,不适合生产环境频繁请求
GatewayWorker只用来下发数据,不要用来写复杂的业务逻辑;
所有上行数据,走http请求 Laravel。
GatewayWorker ===>>> 用户端或设备端
用户端或设备端 ===>>> Laravel
https://github.com/walkor/workerman-filemonitor
这里有检测程序示例,会自动检测文件更新自动执行reload加载最新代码。
如果是新项目,建议用wbman配合gateway-worker插件来做,自动更新是现成的,并且支持laravel的的库例如laravel-orm等。