当前位置: 首页 > 文档资料 > Swoole 中文文档 >

属性

优质
小牛编辑
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']]

!> 工作进程重启后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迭代器
  • 示例

    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
    });