Swoole 学习笔记

进度

  • 进程管理9

运行模式

这里对异步非阻塞的理解是 : 就是你有多个进程,同时在运行,互相不会阻塞对方,就是swoole里开多个进程的效果(来自 b 站 - 码农老张的回复)

SWOOLE_BASE

没有 master 进程的角色, 之后 Manager 和 Worker 进程, 我们假定建立了4个 worker 进程, 然后看下依赖树, 如果是 1 个 Worker, 则不会创建 Manager 进程

1
2
3
4
5
|   \-+= 80844 duoli php ./base.php           # Manager
| |--- 80848 duoli php ./base.php # Worker .. 1
| |--- 80849 duoli php ./base.php ..
| |--- 80850 duoli php ./base.php ..
| \--- 80851 duoli php ./base.php # Worker .. 4

比如这里我们设定一个进程, 同时启用了 sleep , 官方文档的说法是服务将会退化为同步模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

use Swoole\Http\Request;
use Swoole\Http\Response;
use Swoole\Http\Server;


$server = new Server('', 9501, SWOOLE_BASE);

$server->set([
'worker_num' => 1,
]);

$server->on('Request', function (Request $request, Response $response) {
$sleep = $request->get['sleep'] ?: 0;
go(function () use ($sleep, $response) {
sleep($sleep);
$response->end($sleep);
});
});

$server->start();

我们启动服务后运行(使用2 个命令行), 这个也可能说明了回调函数函数中有阻塞操作会将 Server 退化为同步模式

1
2
3
4
$ curl http://127.0.0.1:9501/\?sleep=5          
$ curl http://127.0.0.1:9501/\?sleep=2
5s 后输出 5
7s 后输出 2

SWOOLE_PROCESS 模式

Process 模式是 4.x 默认模式, 5.x 默认模式更改成了 BASE 模式
还是上面的例子我们将运行模式更改为 SWOOLE_PROCESS 模式, 这里的进程变更为如下

1
2
3
4
5
6
| | \-+= 08050 duoli php ./process.php            # Master 进程
| | \-+- 08051 duoli php ./process.php # Manager 进程
| | |--- 08052 duoli php ./process.php # Worker 进程(如果存在 Task Worker 进程也在以下将进程添加进来)
| | |--- 08053 duoli php ./process.php
| | |--- 08054 duoli php ./process.php
| | \--- 08055 duoli php ./process.php

新补充的内容

安装部分

  1. openssl
  2. http2

  3. cares
  4. Yasd , 使用这个工具进行完整的 swoole 调试和跟踪
  5. xhprof 和 blackfire, molten 可以用 swoole tracker 来替代

启动
swoole 是否可以做 php-fpm 的类型客户端


语雀镜像 : Swoole 学习笔记 ,点此 提问

作者

Duoli

发布于

2022-11-14

更新于

2022-11-14

许可协议

评论