EventLoop是Workerman每个Worker进程持续运行的主循环,基于epoll/kqueue等I/O多路复用机制监听socket事件,事件就绪时立即调用onConnect、onMessage等回调;装event扩展可使吞吐量提升3–5倍,前提是系统已安装libevent且扩展正确加载并被Workerman实际启用。

Workerman 5.2.3 本身**不需要强制安装 libevent 扩展**,它能正常运行在默认事件驱动(如 stream_select)上。但是否需要装,取决于你的实际负载场景。
什么情况下建议装 libevent(或更推荐的 event)扩展?
当你的业务面临以下任一情况时,强烈建议安装:
- 并发连接数经常超过 1000(尤其是 WebSocket 或长连接服务)
- CPU 使用率偏高,尤其在 I/O 等待阶段明显占满 worker 进程
- 日志中看到 EventLoop 驱动显示为 select 或 poll(说明未启用高性能驱动)
- 实测吞吐量达不到预期,比如 10k 并发下响应延迟明显上升
libevent 和 event 扩展怎么选?
Workerman 5.2.3 优先检测并使用 event 扩展(PHP 7.0+ 推荐),而非 libevent:
-
event 扩展:基于 libevent 2.x 封装,性能更好、API 更现代、维护活跃;需系统已安装
libevent-devel(Linux)或libevent(macOS) - libevent 扩展:较老,PHP 5.4–5.6 兼容性好,PHP 7+ 不再官方支持;Workerman 官方已不推荐用于新项目
- 二者只装其一即可,Workerman 会自动选用可用且优先级更高的那个
如何确认是否生效?
启动 Workerman 后,看控制台第一行日志:
- 出现类似 event-3.0.7 或 libevent-0.1.0 → 已启用对应扩展
- 只显示 select 或 poll → 仍在用回退方案,需检查:
•php -m | grep event是否列出 event
•php --ini对应的 php.ini 中是否写了extension=event.so
•ldd $(php-config --extension-dir)/event.so | grep libevent是否能找到 libevent 动态库
不复杂但容易忽略:Workerman 运行在 PHP CLI 模式下,网页中 phpinfo() 显示已安装 event,不代表 CLI 环境也加载了——必须用 php -m 和 php --ini 单独验证命令行环境。

















