下面给你一份 Swoole 4.x Server 的「配置项 + 核心函数」完整速查与讲解,适合查文档 / 面试 / 实战部署使用。
内容基于 Swoole 4.x(稳定主流)。
一、Swoole Server 是什么?
Swoole\Server 是一个 常驻内存的高性能网络服务器,支持:
- TCP / UDP
- HTTP / WebSocket
- 多进程 + 异步 IO
- 协程(4.x 之后是核心能力)
二、Server 创建方式
1️⃣ TCP Server
$server = new Swoole\Server("0.0.0.0", 9501);
2️⃣ HTTP Server
$server = new Swoole\Http\Server("0.0.0.0", 9501);
3️⃣ WebSocket Server
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
三、Server 核心配置项(set)
$server->set([
'worker_num' => 4,
'max_request' => 10000,
'daemonize' => false,
'dispatch_mode' => 2,
]);
四、Server 配置项大全(重点)
① 进程相关(最重要)
| 配置 | 说明 |
|---|
| worker_num | Worker 进程数(CPU核数×1~2) |
| reactor_num | Reactor 线程数 |
| task_worker_num | Task 进程数 |
| max_request | 每个 worker 处理请求上限 |
| max_request_grace | 平滑重启阈值 |
② 守护 / 日志
| 配置 | 说明 |
|---|
| daemonize | 是否守护进程 |
| log_file | 日志文件路径 |
| log_level | 日志级别 |
| pid_file | PID 文件 |
③ 网络 & 性能
| 配置 | 说明 |
|---|
| backlog | listen 队列 |
| open_tcp_nodelay | 关闭 Nagle |
| buffer_output_size | 输出缓冲 |
| socket_buffer_size | Socket 缓冲 |
④ TCP 粘包处理
| 配置 | 用途 |
|---|
| open_length_check | 长度协议 |
| open_eof_check | EOF 协议 |
| package_length_type | 包头类型 |
| package_eof | EOF 标识 |
⑤ HTTP / WebSocket
| 配置 | 说明 |
|---|
| enable_static_handler | 静态文件 |
| document_root | 静态目录 |
| http_compression | gzip |
| websocket_compression | WS 压缩 |
⑥ 协程(4.x 重点)
| 配置 | 说明 |
|---|
| enable_coroutine | 启用协程 |
| max_coroutine | 最大协程数 |
| hook_flags | 协程 Hook |
五、Server 生命周期回调函数(必须掌握)
1️⃣ 服务器启动
$server->on('Start', function ($server) {
echo "Server started\n";
});
2️⃣ Worker 启动(最常用)
$server->on('WorkerStart', function ($server, $workerId) {
// 初始化数据库连接、Redis、容器
});
3️⃣ 接收数据(TCP)
$server->on('Receive', function ($server, $fd, $reactorId, $data) {
$server->send($fd, "hello");
});
4️⃣ HTTP 请求
$server->on('Request', function ($request, $response) {
$response->end("Hello Swoole");
});
5️⃣ WebSocket 事件
$server->on('Open', function ($server, $request) {});
$server->on('Message', function ($server, $frame) {
$server->push($frame->fd, "pong");
});
$server->on('Close', function ($server, $fd) {});
6️⃣ Task 异步任务
$server->on('Task', function ($server, $taskId, $srcWorkerId, $data) {
return "ok";
});
$server->on('Finish', function ($server, $taskId, $data) {});
六、Server 常用方法列表(速查)
① 启动 / 停止
| 方法 | 说明 |
|---|
| start() | 启动服务器 |
| shutdown() | 关闭 |
| reload() | 热重启 |
| stop($fd) | 关闭连接 |
② 连接操作
| 方法 | 说明 |
|---|
| send($fd, $data) | 发送数据 |
| close($fd) | 关闭连接 |
| exists($fd) | 连接是否存在 |
③ Task / 进程
| 方法 | 说明 |
|---|
| task($data) | 投递任务 |
| taskwait() | 同步任务 |
| taskCo() | 协程任务 |
| stats() | 服务器状态 |
④ WebSocket
| 方法 | 说明 |
|---|
| push($fd, $data) | 推送消息 |
| isEstablished($fd) | 是否 WS |
⑤ 定时器
Swoole\Timer::tick(1000, function () {
echo "tick\n";
});
七、典型配置模板(生产建议)
$server->set([
'worker_num' => swoole_cpu_num(),
'task_worker_num' => 4,
'max_request' => 5000,
'daemonize' => true,
'log_file' => '/var/log/swoole.log',
'enable_coroutine' => true,
'hook_flags' => SWOOLE_HOOK_ALL,
]);
八、Swoole 4.x 使用注意事项(血泪经验)
❗ 不要在 WorkerStart 里写阻塞 IO
❗ 不要使用 exit / die
❗ 数据库连接要 每个 worker 一份
❗ 全局变量 ≠ 线程安全
❗ 必须考虑 进程隔离
九、和 5.x 的关键区别(简要)
| 项 | 4.x |
|---|
| 协程 | 稳定 |
| Hook | 手动配置 |
| Server API | 主流 |
| 生态 | Hyperf |
十、一句话总结
Swoole 4.x 的本质是:多进程 + 协程 + 事件驱动的常驻 PHP 服务引擎
发表回复