Server->addProcess
最后更新于:2022-04-02 06:19:49
# 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();
~~~
';