本文目录导读:

- 第一梯队:Swoole(含 Hyperf / EasySwoole)
- 第二梯队:Workerman(含 GatewayWorker)
- 第三梯队:ReactPHP / Amp(纯异步)
- 第四梯队:CLI 模式 + 系统守护(supervisor / systemd)
- 终极决策表(对照一下)
- 避坑建议(很重要)
在 PHP 里选常驻方案,核心逻辑是:业务类型决定了技术选型,PHP 的常驻方案不是为了替代传统 PHP-FPM,而是为了解决特定场景的内存复用、高并发和异步问题。
我按推荐优先级和适用场景帮你拆解,分四类:
第一梯队:Swoole(含 Hyperf / EasySwoole)
适用场景:需要高并发 TCP/UDP 服务、长连接(如 WebSocket)、微服务、中台 API、异步任务。
- 本质:C 扩展 + 协程,常驻内存,自带进程管理、协程调度、定时器。
- 优势:
- 性能极强,远超 PHP-FPM。
- 协程解决了并发瓶颈,能支撑数万连接。
- 生态成熟,Hyperf 框架(注解+容器)非常接近 Java Spring Boot 体验。
- 劣势:
- 写代码心智负担重(需懂协程、反射、依赖注入)。
- 环境要求高:需要 Linux + 特定扩展编译(无法在纯 Windows 跑)。
- 稳定性依赖运维水平,内存泄漏需用
monitor或定时重启兜底。
- 选型建议:如果你的业务是长连接推送、游戏服务端、API 网关,优先考虑,团队有能力维护异步代码,选它准没错。
第二梯队:Workerman(含 GatewayWorker)
适用场景:原生 PHP 写常驻服务,但不想上 Swoole 的复杂进程模型,适合即时通讯(IM)、物联网(IoT)、轻量级 RPC。
- 本质:纯 PHP 写的常驻框架(Event-Loop),底层核心是
stream或libevent。 - 优势:
- 纯 PHP 实现,部署简单,Windows 也能跑(比 Swoole 友好)。
- 学习曲线平缓,上手快,文档较通俗。
- GatewayWorker 对长连接业务(聊天、定位)做了封装,开箱即用。
- 劣势:
- 性能略逊于 Swoole(无协程支持,是阻塞式并发)。
- 生态较弱,复杂业务需手动拼装。
- 选型建议:如果团队不熟编译 C 扩展,或需要在 Windows 开发环境调试,用 Workerman 会更快落地,特别是做一个聊天室或硬件数据接收服务。
第三梯队:ReactPHP / Amp(纯异步)
适用场景:追求极简、非阻塞 I/O,但不想依赖重型框架,更多用于独立的异步组件或配合现有系统。
- 本质:纯 PHP 的事件驱动库(Event-Loop + Promises)。
- 优势:
- 轻量,模块化,可按需引入。
- 无扩展依赖,Composer 即装即用。
- 容易嵌入到现有 PHP-FPM 项目里做解耦。
- 劣势:
- 写异步代码较底层(Promise 地狱),代码可读性差。
- 生态碎片化,维护活跃度不如前两者。
- 选型建议:如果你只是想做一个简单的异步 HTTP 代理,或者监听端口转发日志,没必要上 Swoole,用 ReactPHP 足够。
第四梯队:CLI 模式 + 系统守护(supervisor / systemd)
适用场景:周期性的定时任务、简单的常驻脚本(如消费者队列、轮询数据库)。
- 本质:不是框架,而是靠系统工具守护的常驻 PHP 进程。
- 做法:写一个
while(true)循环脚本,通过 supervisor 或 systemd 拉起来,崩溃自动重启,输出重定向到日志。 - 优势:
- 零学习成本,完全属于 PHP 基础语法。
- 不占用额外内存(无框架加载),极轻量。
- 调试方便,打日志即可。
- 劣势:
- 处理并发能力弱(单进程,需手动
pcntl多进程)。 - 没有协程和异步,高 I/O 场景会阻塞。
- 处理并发能力弱(单进程,需手动
- 选型建议:如果你的场景是消费 Redis 队列(如订单发货通知)、定时清理缓存,直接用这个方案搭配
pcntl_fork分支进程,性价比最高,也最稳。
终极决策表(对照一下)
| 你的需求 | 推荐方案 | 理由 |
|---|---|---|
| API 高并发 / 微服务 | Swoole + Hyperf | 性能、生态、协程 |
| 长连接(聊天/游戏/定位) | Workerman(GatewayWorker) | 部署简单,协议封装完善 |
| 异步非阻塞组件 | ReactPHP | 轻量、无依赖 |
| 定时任务 / 队列消费 | CLI + supervisor | 简单可靠 |
避坑建议(很重要)
- 不要一上来就上 Swoole:如果团队只有能写
foreach和echo的 PHP 开发者,强行上 Swoole 会导致代码黑洞(协程泄漏、连接池错乱)。 - 常驻必须有守护:无论选哪个框架,必须配 supervisor,因为内存泄漏是时间问题,进程重启是常态,不是意外。
- 注意
pcntl与swoole不兼容:如果用了 Swoole,禁止再用pcntl_fork或pcntl_wait,会直接崩溃。 - 优先看团队栈,再看技术栈:如果你团队里没人看过 Swoole 源码,出了问题会茫无头绪,而 Workerman 是纯 PHP,出问题至少能自己追进去看。
最后给个黄金建议:如果是新项目,且团队成员有几年 PHP 经验,直接上 Swoole + Hyperf,这将是现阶段 PHP 最体面、最有发展前景的常驻方案,如果只是应急或小工具,CLI + supervisor 足够了。