💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Server->addProcess [TOC] 添加一个用户自定义的工作进程。此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。 ~~~ 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(); ~~~