Windows 上通过 WSL 安装 Swoole 的最佳实践:最靠谱的搭建方式
想在 Windows 系统上原生运行 Swoole?这条路基本走不通。但换个思路,借助 WSL(尤其是 WSL2)来搭建开发环境,反而是目前最接近生产环境的方案。在 WSL 里直接安装 PHP 和 Swoole,比在 Windows 下费劲寻找 php_swoole.dll 要靠谱得多——不仅功能完整,还能避开那些令人头疼的 TS/NTS、x86/x64 兼容问题。简单来说,这才是“正道”。

第一步:安装并配置 WSL2
并非所有 Windows 系统都默认开启 WSL2,尤其是老机器或未及时更新的版本。先检查一下:
以管理员身份打开 PowerShell,输入:wsl --list --verbose —— 如果提示命令不存在或返回空列表,说明 WSL 尚未启用。
此时,依次运行以下两条命令(完成后需重启):dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启之后,前往 Microsoft Store 安装 Ubuntu 22.04 或 24.04。建议避开 18.04,因为该版本较老,容易缺少 libbrotli-dev 等关键依赖。首次启动时会提示创建用户,务必设置好密码。
第二步:安装 PHP 及编译依赖
WSL 默认的软件源可能版本较旧,建议先更新再安装 PHP,以避免版本错位——例如装了 PHP 8.3 却使用了 PHP 8.1 的 phpize,就会导致编译失败。
- 执行
sudo apt update && sudo apt upgrade -y - 接着安装 PHP CLI 和常用扩展:
sudo apt install php-cli php-dev php-mbstring php-xml php-curl php-zip php-json pkg-config libssl-dev libpcre3-dev libbrotli-dev - 验证安装:
php -v应显示版本号;which phpize应返回路径(通常为/usr/bin/phpize)——至此基础环境已就绪。
需要特别注意:libbrotli-dev 是重要依赖。如果遇到 E: Unable to locate package libbrotlienc-dev 的错误,请直接安装 libbrotli-dev,注意拼写即可。
第三步:使用 PECL 安装 Swoole 扩展,最简单省心
相比手动编译源码,借助 PECL 安装 Swoole 要简单得多,踩坑概率也显著降低。
- 首先确认已安装
php-pear:sudo apt install php-pear - 然后执行:
pecl install swoole。安装过程中会询问是否启用某些特性,直接按回车接受默认选项即可。 - PECL 会自动将
swoole.so放入扩展目录,并输出类似extension=swoole的配置行。 - 接着将该行添加到 CLI 配置文件:
echo "extension=swoole" | sudo tee /etc/php/*/cli/conf.d/20-swoole.ini - 最后验证:
php -m | grep swoole如果输出swoole,说明安装成功;再用php --ri swoole查看详细信息。
如果你使用的是 FPM(例如搭配 Nginx),还需要额外添加一行到 FPM 的 conf.d 目录,路径类似 /etc/php/*/fpm/conf.d/20-swoole.ini。
第四步:运行服务时务必关闭 daemonize
WSL 对 daemonize=1 的支持存在缺陷。如果开启此选项,进程会立刻退出,看起来就像没有启动成功。
编写 TCP 或 HTTP 服务时,必须显式设置:
$server = new SwooleHttpServer('0.0.0.0', 9501);
$server->set(['daemonize' => 0]); // 关键
另外,signal 相关功能(如 Process::signal())在 WSL 中行为也不稳定。如果需要测试信号处理逻辑,建议切换到真正的 Linux 环境。开发阶段使用 php server.php 启动,按 Ctrl+C 终止即可——这才是 WSL 下正常的工作交互方式。
