swoole学习之: 服务端(异步风格)-TCP/UDP服务器 - 属性

本文是官方文档 https://wiki.swoole.com/#/server/properties 的重新手打版本.

$setting

Server->set()函数所设置的参数会保存到Server->setting属性上. 在回调函数中可以访问运行参数的值.

Swoole\Server->setting

demo:

$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
    'worker_num'=>4,
]);
var_export($server->setting);
echo PHP_EOL;
//$server->start(); //这里不需要start就可以执行上面的代码

直接运行:

$master_pid

返回当前服务器主进程的PID

Swoole\Server->master_pid: int

demo:

$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
    'worker_num'=>4,
]);
var_export($server->setting);
echo PHP_EOL;
$server->on('start', function(Swoole\Server $server){
    //获取当前服务器主进程的 PID
    echo 'master_pid:'.$server->master_pid.PHP_EOL;
});
$server->on('receive', function(Swoole\Server $server, $fd, $reactor_id, $data){
    //收到客户端信息, 回复内容, 并关闭连接
    $server->send($fd, 'Swoole Server received your data:'.trim($data).PHP_EOL);
    $server->close($fd);
});
$server->start();

启动服务并使用telnet连接, 然后在客户端发送消息"aaa":

$manager_pid

但会当前服务器管理进程的PID

Swoole\Server->manager_pid: int

只能在onStartonWorkerStart之后获取到

demo:

$server = new Swoole\Server('127.0.0.1', 9501);
$server->on('start', function(Swoole\Server $server){
    //获取当前服务器管理进程的 PID
    echo 'manager_pid:'.$server->manager_pid.PHP_EOL;
});
$server->on('receive', function(Swoole\Server $server, $fd, $reactor_id, $data){
    //收到客户端信息, 回复内容, 并关闭连接
    $server->send($fd, 'Swoole Server received your data:'.trim($data).PHP_EOL);
    $server->close($fd);
});
$server->start();

和上面一样, 启动服务并使用telnet连接, 然后在客户端发送消息"aaa":

$worker_id

得到当前Worker进程的编号, 包括Task进程.

Swoole\Server->worker_id: int

demo:

$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
    'worker_num'=>4,
    'task_worker_num'=>4,
]);
$server->on('workerStart', function(Swoole\Server $server, $workerId){
    if($server->taskworker){
        echo 'task workerId:'.$workerId;
        echo ', task worker_id:'.$server->worker_id.PHP_EOL;
    }else{
        echo 'workerId:'.$workerId;
        echo ', worker_id:'.$server->worker_id.PHP_EOL;
    }
});
//必须设置onReceive事件回调函数
$server->on('receive', function(Swoole\Server $server, $fd, $reactor_id, $data){
});
//必须设置onTask事件回调函数
$server->on('task', function(Swoole\Server $server, $task_id, $reactor_id, $data){
});
$server->start();

启动服务器:

  • 这个Swoole\Server->worker_id属性与onWorkerStart$worker_id是相同的.
  • Worker进程编号范围是[0, $server->setting['worker_num'] - 1]
  • Task进程编号范围是: [$sever->setting['worker_num'], $server->setting['worker_num'] + $server->setting['task_worker_num']].

Worker进程重启后worker_id的值是不变的

$worker_pid

得到当前Worker进程的操作系统进程ID, 与posix_getpid()的返回值相同.

Swoole\Server->worker_pid: int

$taskworker

当前进程是否是Task进程

Swoole\Server->taskworker: bool

返回值: true表示当前进程是Task工作进程, 否则就是Worker进程

$connections

TCP连接迭代器, 可以使用foreach遍历服务器当前所有的连接, 此属性的功能与Server->getClientList是一致的, 但是更加友好.

遍历的元素为单个连接的fd.

Swoole\Server->connections

$connections属性是一个迭代器对象, 不是PHP数组, 所以不能用var_dump或者数组下标来访问, 只能通过foreach来循环.

  • Base 模式
    • SWOOLE_BASE模式下不支持夸进程操作TCP连接, 因此在BASE模式中, 只能在当前进程内使用$connections迭代器.

demo:

foreach($server->connections as $fd){
    var_dump($fd);
}
echo '当前服务器共有'.count($server->connections).'个连接'.PHP_EOL;

$ports

监听的端口数组. 如果服务器监听了多个端口, 可以遍历Server::$ports得到所有Swoole\Server\Port对象.

其中swoole_server::$ports[0]为构造方法所设置的主服务器端口.

$ports = $server->ports;
$ports[0]->set($settings);
$ports[1]->on('receive', function(){
    //onReceive event callback function
});
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个安装 Hyperf 框架的 `yaml` 文件示例: ```yaml stages: - install - start install: stage: install image: docker:latest services: - docker:dind script: - docker run -d --name hyperf -v /mnt/hgfs/www/hyperf/:/hyperf-skeleton -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh hyperf/hyperf:7.4-alpine-v3.11-swoole - docker exec -it hyperf sh -c "cd /hyperf-skeleton && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer && composer create-project hyperf/hyperf-skeleton" artifacts: paths: - /mnt/hgfs/www/hyperf/hyperf-skeleton start: stage: start image: docker:latest services: - docker:dind script: - docker start hyperf - docker exec -it hyperf sh -c "cd /hyperf-skeleton && php /hyperf-skeleton/bin/hyperf.php start" ``` 这个 YAML 文件定义了两个阶段,第一个阶段为 `install`,用于在 Docker 容器中安装 Hyperf 框架及其相关依赖;第二个阶段为 `start`,用于在 Docker 容器中启动 Hyperf 框架。在 `install` 阶段中,我们使用了 `docker` 镜像,在 Docker 容器中执行了 `docker run` 命令来创建 Hyperf 容器,并执行了 `docker exec` 命令来执行安装 Hyperf 框架及其相关依赖的命令。在 `start` 阶段中,我们同样使用了 `docker` 镜像,在 Docker 容器中执行了 `docker start` 命令来启动 Hyperf 容器,并执行了 `docker exec` 命令来启动 Hyperf 框架。在 `install` 阶段中,我们还使用了 `artifacts` 关键字来指定将 Hyperf 框架所在的目录 `/mnt/hgfs/www/hyperf/hyperf-skeleton` 作为构建产物,以便在后续的阶段中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值