协程是Swoole4用户态轻量级执行流,内存仅几KB,支持数万并发;需用协程客户端、co::sleep及连接池;多进程模型含Reactor/Worker/TaskWorker,推荐worker_num=CPU核心数;内置HTTP/Redis/WebSocket协程客户端;部署需系统加固、日志分离、健康检查与平滑重启。

协程是 Swoole4 的核心执行单元
协程不是线程,也不依赖操作系统调度,而是由 Swoole 在用户态自主管理的轻量级执行流。每个协程内存开销仅几 KB,可轻松并发数万级。启动方式极简:go(function () { /* 业务逻辑 */ });,无需改写传统同步代码风格,底层自动挂起/恢复。
关键注意事项:
- 所有 I/O 操作(如 HTTP 请求、Redis 查询、MySQL 查询)必须使用 Swoole 提供的协程客户端,原生 PHP 函数(
file_get_contents、curl_exec等)会阻塞整个进程 - 协程内不能使用
sleep(),应改用co::sleep(1) - 全局变量、静态变量在协程间不隔离,需用
Co::getUid()或Context存储协程私有数据 - 数据库连接、Redis 连接等资源建议配合连接池使用,避免单连接被多个协程争抢
Swoole4 的多进程模型与关键配置
Swoole4 默认采用 SWOOLE_PROCESS 模式,由 Master、Manager、Reactor、Worker、TaskWorker 五类进程协同工作。其中:
- Reactor 线程负责网络收发和协议解析,纯 C 实现,不执行 PHP 代码
-
Worker 进程处理实际业务逻辑,数量建议严格匹配 CPU 物理核心数(如 8 核设为
'worker_num' => 8) - TaskWorker 专用于执行耗时、阻塞型任务(如文件导出、图像处理),与 Worker 隔离,防止拖慢请求响应
生产环境推荐基础配置片段:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
$server->set([
'worker_num' => 8,
'task_worker_num' => 4,
'max_coroutine' => 3000,
'open_tcp_nodelay'=> true,
'daemonize' => true,
'log_file' => '/var/log/swoole/error.log',
'pid_file' => '/var/run/swoole.pid',
'reload_async' => true,
'max_request' => 3000
]);高频实用组件:协程客户端与 WebSocket
Swoole4 内置全套协程化客户端,开箱即用,无需额外安装扩展:
- HTTP 客户端:支持 GET/POST、Header、Cookie、超时、重试,自动复用连接
- Redis 客户端:完全兼容 phpredis 接口,支持 pipeline、订阅发布
- TCP/UDP/WebSocket 客户端:适用于微服务调用、设备通信、实时消息推送
WebSocket 服务部署要点:
- 路由需在
on('message')中自行解析,或结合 ThinkPHP 的think-swoole扩展做事件驱动调度 - 客户端加入/离开房间、广播、点对点推送,均通过
$server->push($fd, $data)和$server->exist($fd)控制 - 务必监听
on('close')和on('disconnect')清理用户状态,避免内存泄漏
生产就绪:部署、监控与故障防护
真正落地不能只靠功能,还要稳:
- 系统层加固:启用
tcp_tw_reuse、调高nofile限制、关闭 swap(减少 GC 延迟) - 日志分离:错误日志、访问日志、业务日志分路径、分级别、加时间戳,便于排查
- 健康检查:提供
/health接口返回 JSON 状态,配合 Nginx 或 Kubernetes 的 liveness probe - 平滑重启:使用
kill -USR1 `cat /var/run/swoole.pid`或php think swoole:reload(ThinkPHP 场景) - 异常兜底:在协程中用
try/catch捕获未处理异常,并记录上下文;设置'enable_coroutine' => true后,PHP 错误也会转为异常
不复杂但容易忽略

















