Server->addProcess
添加一个用户自定义的工作进程。此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。
bool Server->addProcess(Process $process);
此函数在
1.7.9以上版本可用
参数
$process为Process对象,注意不需要执行start。在Server启动时会自动创建进程,并执行指定的子进程函数- 创建的子进程可以调用
$server对象提供的各个方法,如getClientList/getClientInfo/stats - 在
Worker/Task进程中可以调用$process提供的方法与子进程进行通信 - 在用户自定义进程中可以调用
$server->sendMessage与Worker/Task进程通信
返回值
添加成功返回true,失败返回false
注意事项
- 用户进程内不能使用
Server->task/taskwait接口 - 用户进程内可以使用
Server->send/close等接口 - 用户进程内应当进行
while(true)或EventLoop循环,否则用户进程会不停地退出重启
生命周期
用户进程的生存周期与Master和Manager是相同的,不会受到reload影响
- 用户进程不受
reload指令控制,reload时不会向用户进程发送任何信息 - 在
shutdown关闭服务器时,会向用户进程发送SIGTERM信号,关闭用户进程 - 自定义进程会托管到
Manager进程,如果发生致命错误,Manager进程会重新创建一个
示例程序
$server = new Swoole\Server('127.0.0.1', 9501);/*** 用户进程实现了广播功能,循环接收管道消息,并发给服务器的所有连接*/$process = new Swoole\Process(function($process) use ($server) {while (true) {$msg = $process->read();foreach($server->connections as $conn) {$server->send($conn, $msg);}}});$server->addProcess($process);$server->on('receive', function ($serv, $fd, $reactor_id, $data) use ($process) {//群发收到的消息$process->write($data);});$server->start();
