[摘要]本篇文章给大家带来的内容是关于Swoole自定义项目初始化事件处理如何实现(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。最近使用基于 Swoole 开发的 imi 框架 开...
本篇文章给大家带来的内容是关于Swoole自定义项目初始化事件处理如何实现(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
最近使用基于 Swoole 开发的 imi 框架 开发项目,碰到一个需求,就是想要做项目初始化处理。当初始化处理完成前,不想让 Swoole 处理请求。因为可能有一些值没有加载进来,处理请求极有可能出现问题。
下面给出了思考过程及解决问题的demo代码。
首先分析了一下,Swoole 是多进程模式运行的,分为 Master、Manager、Worker 进程。
Master 进程就是我们启动服务的 cli 命令文件所在进程,在这里面初始化有一个问题,这里所有加载的类、全局变量,其它 Worker 进程里都可以使用,无法热重启生效。
Manager 进程的情况基本和上面差不多。
那么只有在 Worker 进程做处理了,但如果写在 WorkerStart 事件里,每个 Worker 进程都会去执行。
WorkerStart 事件定义:
function onWorkerStart(swoole_server $server, int $worker_id);
$worker_id是一个从0-$worker_num之间的数字,表示这个Worker进程的ID