Swoole
是一个使用 C++
语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP
提供协程、高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务
、高性能Web
、WebSocket服务
、物联网
、实时通讯
、游戏
、微服务
等,使 PHP
不再局限于传统的 Web 领域。
安装 Swoole
Swoole
扩展是按照 PHP
标准扩展构建的。使用 phpize
来生成编译检测脚本,./configure
来做编译配置检测,make
进行编译,make install
进行安装。
- 如无特殊需求,请务必编译安装
Swoole
的最新 release 版本或 v4.4LTS - 如果当前用户不是
root
,可能没有PHP
安装目录的写权限,安装时需要sudo
或者su
- 如果是在
git
分支上直接git pull
更新代码,重新编译前务必要执行make clean
- 仅支持
Linux
(2.3.32 以上内核)、FreeBSD
、MacOS
三种操作系统 - 低版本 Linux 系统(如
CentOS 6
)可以使用RedHat
提供的devtools
编译,参考文档 - 在
Windows
平台,可使用WSL(Windows Subsystem for Linux)
或CygWin
- 部分扩展与
Swoole
扩展不兼容,参考扩展冲突
安装准备
安装前必须保证系统已经安装了下列软件
4.8
版本需要php-7.2
或更高版本5.0
版本需要php-8.0
或更高版本gcc-4.8
或更高版本make
autoconf
快速安装
1. 下载 swoole 源码
- https://github.com/swoole/swoole-src/releases
- https://pecl.php.net/package/swoole
- https://gitee.com/swoole/swoole/tags
2. 从源码编译安装
下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装
ubuntu 没有安装 phpize 可执行命令:sudo apt-get install php-dev
来安装 phpize
cd swoole-src && \
phpize && \
./configure && \
make && sudo make install
3. 启用扩展
编译安装到系统成功后,需要在 php.ini
中加入一行 extension=swoole.so
来启用 Swoole 扩展
进阶完整编译示例
初次接触 Swoole 的开发者请先尝试上方的简单编译,如果有进一步的需要,可以根据具体的需求和版本,调整以下示例中的编译参数。编译参数参考
以下脚本会下载并编译 master
分支的源码,需保证你已安装所有依赖,否则会遇到各种依赖错误
mkdir -p ~/build && \
cd ~/build && \
rm -rf ./swoole-src && \
curl -o ./tmp/swoole.tar.gz https://github.com/swoole/swoole-src/archive/master.tar.gz -L && \
tar zxvf ./tmp/swoole.tar.gz && \
mv swoole-src* swoole-src && \
cd swoole-src && \
phpize && \
./configure \
--enable-openssl \
--enable-http2 && \
make && sudo make install
PECL
注意: PECL 发布时间晚于 GitHub 发布时间
Swoole 项目已收录到 PHP 官方扩展库,除了手动下载编译外,还可以通过 PHP 官方提供的 pecl
命令,一键下载安装
pecl install swoole
通过 PECL 安装 Swoole 时,在安装过程中它会询问是否要启用某些功能,这也可以在运行安装之前提供,例如:
pecl install -D 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole
#或者
pecl install --configureoptions 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes" enable-cares="yes"' swoole
添加 Swoole 到 php.ini
最后,编译安装成功后,修改 php.ini
加入
extension=swoole.so
通过 php -m
来查看是否成功加载了 swoole.so
,如果没有可能是 php.ini
的路径不对。
可以使用 php --ini
来定位到 php.ini
的绝对路径,Loaded Configuration File
一项显示的是加载的 php.ini 文件,如果值为 none
证明根本没加载任何 php.ini
文件,需要自己创建。
对 PHP
版本支持和 PHP
官方维护版本保持一致,参考 PHP 版本支持时间表
其他平台编译
ARM 平台(树莓派 Raspberry PI)
- 使用
GCC
交叉编译 - 在编译
Swoole
时,需要手动修改Makefile
去掉-O2
编译参数
MIPS 平台(OpenWrt 路由器)
- 使用 GCC 交叉编译