属性
优质
小牛编辑
141浏览
2023-12-01
$setting
Server::set()函数所设置的参数会保存到Server->$setting
属性上。在回调函数中可以访问运行参数的值。
Swoole\Server->setting
- 示例
$server = new Swoole\Server('127.0.0.1', 9501);
$server->set(array('worker_num' => 4));
echo $server->setting['worker_num'];
$master_pid
返回当前服务器主进程的PID
。
Swoole\Server->master_pid
!> 只能在onStart/onWorkerStart
之后获取到
- 示例
$server = new Swoole\Server("127.0.0.1", 9501); $server->on('start', function ($server){ echo $server->master_pid; }); $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, 'Swoole: '.$data); $server->close($fd); }); $server->start();
$manager_pid
返回当前服务器管理进程的PID
。
Swoole\Server->manager_pid
!> 只能在onStart/onWorkerStart
之后获取到
- 示例
$server = new Swoole\Server("127.0.0.1", 9501); $server->on('start', function ($server){ echo $server->manager_pid; }); $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, 'Swoole: '.$data); $server->close($fd); }); $server->start();
$worker_id
得到当前Worker
进程的编号,包括 Task进程。
Swoole\Server->worker_id: int;
- 示例
$server = new Swoole\Server("127.0.0.1", 9501);
$server->on('workerstart', function ($server, int $workerId){
echo "workerId:" . $workerId . PHP_EOL;
echo "worker_id:" . $server->worker_id . PHP_EOL;
});
$server->on('receive', function ($server, $fd, $reactor_id, $data) {
$server->send($fd, 'Swoole: '.$data);
$server->close($fd);
});
$server->start();
提示
- 这个属性与onWorkerStart时的
$workerId
是相同的。 Worker
进程编号范围是[0, $serv->setting['worker_num']-1]
- Task进程编号范围是
[$serv->setting['worker_num'], $serv->setting['worker_num'] + $serv->setting['task_worker_num']]
- 这个属性与onWorkerStart时的
!> 工作进程重启后worker_id
的值是不变的
$worker_pid
得到当前Worker
进程的操作系统进程ID
。与posix_getpid()
的返回值相同。
Swoole\Server->worker_pid: int;
$taskworker
当前进程是否是 Task
进程。
Swoole\Server->taskworker: bool;
- 返回值
true
表示当前的进程是Task
工作进程false
表示当前的进程是Worker
进程
$connections
TCP
连接迭代器,可以使用foreach
遍历服务器当前所有的连接,此属性的功能与Server->getClientList是一致的,但是更加友好。
遍历的元素为单个连接的fd
。
Swoole\Server->connections
!> $connections
属性是一个迭代器对象,不是PHP数组,所以不能用var_dump
或者数组下标来访问,只能通过foreach
进行遍历操作
Base 模式
- SWOOLE_BASE 模式下不支持跨进程操作
TCP
连接,因此在BASE
模式中,只能在当前进程内使用$connections
迭代器
- SWOOLE_BASE 模式下不支持跨进程操作
示例
foreach ($server->connections as $fd) { var_dump($fd); } echo "当前服务器共有 " . count($server->connections) . " 个连接\n";
$ports
监听端口数组,如果服务器监听了多个端口可以遍历Server::$ports
得到所有Swoole\Server\Port
对象。
其中swoole_server::$ports[0]
为构造方法所设置的主服务器端口。
示例
$ports = $server->ports; $ports[0]->set($settings); $ports[1]->on("Receive", function () { //callback });