swoole 4 环境需确保linux内核≥3.10(推荐≥4.4)、php≥7.2且启用sockets/mbstring/json扩展、编译时指定正确php-config路径,并通过php --ri swoole验证coroutine/epoll/openssl等关键特性已启用。

Swoole 4 环境不是装上就能跑,很多“扩展已加载但服务起不来”“协程不生效”“WebSocket连接秒断”的问题,根源都在环境依赖没对齐。重点不是版本号是否够新,而是系统能力、PHP配置、编译选项三者是否匹配。
系统与内核能力检查
Swoole 4 重度依赖 Linux 内核特性(epoll、eventfd、signalfd、timerfd),Windows 原生不支持(Swoole-CLI 是特例,非标准 Swoole 扩展)。必须确认:
- Linux 发行版:CentOS 7+ / Ubuntu 16.04+(内核 ≥ 3.10,推荐 ≥ 4.4)
- 避免使用老旧或裁剪版内核(如某些 OpenVZ、低配 VPS 的 kernel-latest 或 custom kernel)
- 执行 cat /proc/sys/kernel/yama/ptrace_scope,若输出为 1,需临时设为 0(echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope),否则协程调试可能失败
- 检查 ulimit -n,建议 ≥ 65535;若不足,在 /etc/security/limits.conf 中追加 * soft nofile 65535 和 * hard nofile 65535
PHP 版本与基础扩展要求
Swoole 4.x 明确要求 PHP ≥ 7.0(官方最低兼容 5.3.10,但实际生产强烈建议 7.2+);PHP 必须启用以下基础模块:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- sockets(必需,非可选;Ubuntu/Debian 需 sudo apt-get install php-dev,CentOS/RHEL 需 yum install php-devel)
- mbstring(字符串处理,中文场景刚需)
- json(Swoole 内部序列化依赖)
- 禁用 opcache.enable=0(开发调试阶段建议关闭,避免代码热更失效)
- 确认 php.ini 中未设置 disable_functions 拦截 pcntl_fork、posix_kill 等(Swoole 进程管理会调用)
编译安装前的依赖清理与路径锁定
手动编译是最可控方式,但极易因路径混乱失败。关键动作不是“运行命令”,而是“验证路径”:
- 用 which phpize 和 which php-config 查明真实路径;若多个 PHP 版本共存,必须用绝对路径(如 /usr/local/php/bin/phpize)
- 执行 phpize 前,确保在 Swoole 源码根目录(含 config.m4),否则报 “Cannot find config.m4”
- configure 阶段务必指定 --with-php-config=/path/to/php-config,否则会默认找系统 PATH 下第一个,易错配
- CentOS/RHEL 安装前先运行:yum install -y gcc gcc-c++ autoconf libtool make pcre-devel openssl-devel(缺 openssl-devel 会导致 --enable-openssl 编译失败)
- Ubuntu/Debian 对应安装:sudo apt-get install -y build-essential autoconf pkg-config libssl-dev libpcre3-dev
安装后验证要点(不止 php -m)
看到 swoole 在 php -m 列表里 ≠ 环境就绪。必须交叉验证:
- 运行 php --ri swoole,确认 coroutine => enabled、epoll => enabled、openssl => enabled(若项目用 HTTPS/WebSocket)
- 检查输出中 Built 时间是否为本次编译时间,排除旧版本残留
- 执行 php -r "echo SWOOLE_VERSION;",比对官网 Release 页面的 v4.x 最新版号(如 4.10.1)
- 写一个最小测试脚本:php -r "Swoole\Coroutine::create(function() { echo 'OK'; });",无报错才算协程真正可用
- 若用 ThinkPHP6 + think-swoole,请确认 composer show topthink/think-swoole 输出版本为 v3.x(对应 Swoole 4),v4.x 仅适配 Swoole 5+









