NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# onWorkerStart 此事件在worker进程/task进程启动时发生。这里创建的对象可以在进程生命周期内使用。原型: ~~~ void onWorkerStart(resource $server, int $worker_id); ~~~ > swoole1.6.11之后task_worker中也会触发onWorkerStart 发生PHP致命错误或者代码中主动调用exit时,Worker/Task进程会退出,管理进程会重新创建新的进程 onWorkerStart/onStart是并发执行的,没有先后顺序 通过$worker_id参数的值来,判断worker是普通worker还是task_worker。$worker_id>= $serv->setting['worker_num'] 时表示这个进程是task_worker。 下面的示例用于为task_worker和worker进程重命名。 ~~~ $serv->on('WorkerStart', function ($serv, $worker_id){ global $argv; if($worker_id >= $serv->setting['worker_num']) { swoole_set_process_name("php {$argv[0]} task worker"); } else { swoole_set_process_name("php {$argv[0]} event worker"); } }); ~~~ 如果想使用swoole_server_reload实现代码重载入,必须在workerStart中require你的业务文件,而不是在文件头部。在onWorkerStart调用之前已包含的文件,不会重新载入代码。 > 可以将公用的,不易变的php文件放置到onWorkerStart之前。这样虽然不能重载入代码,但所有worker是共享的,不需要额外的内存来保存这些数据。 onWorkerStart之后的代码每个worker都需要在内存中保存一份 - $worker_id是一个从0-$worker_num之间的数字,表示这个worker进程的ID - $worker_id和进程PID没有任何关系 |  Swoole流程 | |-----| ![](https://box.kancloud.cn/2015-07-20_55aca2b48f3be.)