Laravel中使用GatewayWorker,在onMessage中調(diào)用控制器的方法,每次修改控制器中的方法要重啟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";
}
}
使用隊(duì)列、使用app()動(dòng)態(tài)加載都無(wú)效
https://github.com/walkor/workerman-filemonitor
這里有檢測(cè)程序示例,會(huì)自動(dòng)檢測(cè)文件更新自動(dòng)執(zhí)行reload加載最新代碼。
如果是新項(xiàng)目,建議用wbman配合gateway-worker插件來(lái)做,自動(dòng)更新是現(xiàn)成的,并且支持laravel的的庫(kù)例如laravel-orm等。