swoole 4.x 系列(如 4.8.x、4.10.x)官方明确支持 linux、macos 和 freebsd,windows 不原生支持编译运行;所谓“跨平台”指类 unix 系统间兼容,并非三端一致可编译。

目前 Swoole 4.x 系列(如 4.8.x、4.10.x)官方明确支持 Linux、macOS 和 FreeBSD,Windows 并不原生支持编译运行。所谓“跨平台”是指在主流类 Unix 系统间具备良好兼容性,而非真正意义的 Windows/macOS/Linux 三端一致可编译。若你看到“Swoole 支持 Windows”,通常指极早期(v1.x)的实验性支持或通过 WSL2/虚拟机间接运行,生产环境务必避免在原生 Windows 上部署 Swoole 4。
Linux/macOS 下标准编译流程(高兼容性)
只要系统满足最低依赖,Swoole 4 的源码编译在不同发行版间高度一致:
- 确保已安装 PHP CLI 及开发头文件(
php-dev或php-devel) - 安装基础构建工具:
gcc、make、autoconf、g++ - 如需 HTTPS/WebSocket 安全通信,必须安装
libssl-dev(Debian/Ubuntu)或openssl-devel(CentOS/RHEL) - 进入 Swoole 源码目录后,统一执行:
/path/to/php/bin/phpize./configure --with-php-config=/path/to/php/bin/php-config --enable-opensslmake && sudo make install - 生成的
swoole.so文件路径会因 PHP 版本 ABI 不同而变化(如no-debug-non-zts-20200930),但逻辑结构完全一致
macOS 特别注意事项
macOS 使用 Clang 默认编译器,部分旧版本 Swoole 4(如 4.4.x)可能报 error: unknown type name 'uint' 类型定义问题:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 升级 Xcode Command Line Tools 到最新版(
xcode-select --install) - 编译前设置环境变量:
export CC=clang,避免误调用旧版 GCC - 若仍失败,可在
./configure后添加--disable-debug参数减少符号依赖 - Apple Silicon(M1/M2/M3)芯片需确认 PHP 为 ARM64 架构,否则
phpize会生成 x86_64 扩展导致加载失败
从 Linux 移植到另一台 Linux 服务器(免编译)
若两台服务器系统架构相同(如都是 x86_64)、PHP 版本和 ABI 兼容(如均为 PHP 8.1 + Zend Engine v4.1),可直接复用已编译的 swoole.so:
- 确认目标机 PHP 版本与 ABI 标识一致:
php -r "echo PHP_VERSION; echo PHP_ZTS ? ' ZTS' : ' NTS'; echo ' ', PHP_INT_SIZE*8;" - 将源服务器的
swoole.so复制到目标机对应扩展目录(路径可通过php-config --extension-dir查得) - 检查依赖库是否齐全:
ldd /path/to/swoole.so | grep "not found",缺失则安装对应libssl、libnghttp2等系统包 - 修改
php.ini添加extension=swoole.so,重启 PHP 服务即可
不推荐的“伪跨平台”方案
以下方式看似绕过限制,但存在严重隐患,仅限开发测试:
- Windows 原生 DLL 方式:Swoole 4 官方从未发布 Windows 编译版 DLL,社区零星提供的二进制文件无维护、无安全更新、极易崩溃
- Docker for Windows:虽容器内跑 Linux 镜像可行,但 Windows 主机层网络栈与宿主共享复杂,WebSocket 连接稳定性差
- WSL2 作为生产环境:微软明确标注 WSL2 为开发工具,非服务器操作系统,其进程管理、信号处理与真实 Linux 存在差异,长期运行易出现连接泄漏









