ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
``` onStart(Server $server); ``` 启动后在主进程(master)的主线程回调此函数 onStart回调中,仅允许echo、打印Log、修改进程名称。不得执行其他操作。 BASE模式下没有master进程,因此不存在onStart事件。 onStart回调中,仅允许echo、打印Log、修改进程名称。不得执行其他操作。onWorkerStart和onStart回调是在不同进程中并行执行的,不存在先后顺序。 ## 代码语法: ~~~ $server->on('start',function ($serv){ echo 'master_pid..'.$serv->master_pid.PHP_EOL; echo 'manager_pid..'.$serv->manager_pid.PHP_EOL; }); ~~~ ``` onWorkerStart(swoole_server $server, int $worker_id); ``` 此事件在Worker进程/Task进程启动时发生。这里创建的对象可以在进程生命周期内使用 ## 代码语法: ~~~ $server->on('workerstart',function ($serv,$worker_id){ echo 'worker_pid..'.$serv->worker_pid.PHP_EOL; echo 'worker_id..'.$serv->worker_id.PHP_EOL; }); ~~~ ![](https://img.kancloud.cn/aa/02/aa021d1f4fd3e3c4da7278add4346aaa_901x497.png) ``` onManagerStart(swoole_server $serv); ``` 当管理进程启动时调用它 在这个回调函数中可以修改管理进程的名称。 ``` swoole_set_process_name ``` 用于设置进程的名称 在onManagerStart修改为manager进程名称 onStart调用时修改为主进程名称 onWorkerStart修改为worker进程名称 ``` onWorkerError(swoole_server $serv, int $worker_id, int $worker_pid, int $exit_code, int $signal); ``` $worker_id 是异常进程的编号 $worker_pid 是异常进程的ID $exit_code 退出的状态码,范围是 0~255 $signal 进程退出的信号 kill -9 进程号 强制结束 当Worker/Task进程发生异常后会在Manager进程内回调此函数。此函数主要用于报警和监控 ``` onWorkerStop(Swoole\Server $server, int $worker_id); ``` kill 进程号/正常 触发max_req 此事件在Worker进程终止时发生。在此函数中可以回收Worker进程申请的各类资源 ``` onConnect(swoole_server $server, int $fd, int $reactorId); ``` 有新的连接进入时,在worker进程中回调 $server是Swoole\Server对象 $fd是连接的文件描述符,发送数据/关闭连接时需要此参数 $reactorId来自哪个Reactor线程 ``` onReceive(swoole_server $server, int $fd, int $reactor_id, string $data); ``` 接收到数据时回调此函数,发生在worker进程中 $server,Server对象 $fd,TCP客户端连接的唯一标识符 $reactor_id,TCP连接所在的Reactor线程ID $data,收到的数据内容,可能是文本或者二进制内容 代码案例: ~~~ $server->on('receive',function ($serv,$fd,$reactor_id,$data){ echo 'fd--'.$fd.'reactor_id--'.$reactor_id.'data---'.$data.PHP_EOL; }); ~~~ ![](https://img.kancloud.cn/11/f8/11f8056feaa843b77f62dbfe7b8f2f83_932x451.png) ``` onClose(swoole_server $server, int $fd, int $reactorId); ``` TCP客户端连接关闭后,在worker进程中回调此函数 无论由客户端发起close还是服务器端主动调用$serv->close()关闭连接,都会触发此事件