安装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
平台,可使用CygWin
或WSL(Windows Subsystem for Linux)
- 部分扩展与
Swoole
扩展不兼容,参考扩展冲突
安装准备
安装前必须保证系统已经安装了下列软件
php-7.1
或更高版本gcc-4.8
或更高版本make
autoconf
快速安装
1.下载swoole源码
- https://github.com/swoole/swoole-src/releases
- http://pecl.php.net/package/swoole
- http://git.oschina.net/swoole/swoole
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
添加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 交叉编译
Windows WSL
Windows 10
系统增加了 Linux
子系统支持,BashOnWindows
环境下也可以使用 Swoole
。安装命令
apt-get install php7.0 php7.0-curl php7.0-gd php7.0-gmp php7.0-json php7.0-mysql php7.0-opcache php7.0-readline php7.0-sqlite3 php7.0-tidy php7.0-xml php7.0-bcmath php7.0-bz2 php7.0-intl php7.0-mbstring php7.0-mcrypt php7.0-soap php7.0-xsl php7.0-zip
pecl install swoole
echo 'extension=swoole.so' >> /etc/php/7.0/mods-available/swoole.ini
cd /etc/php/7.0/cli/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
cd /etc/php/7.0/fpm/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
!> WSL
环境下必须关闭 daemonize
选项
低于17101
的WSL
,源码安装configure
后需要修改 config.h
关闭 HAVE_SIGNALFD
Docker官方镜像
https://hub.docker.com/r/phpswoole/swoole
编译选项
这里是./configure
编译配置的额外参数,用于开启某些特性
通用参数
--enable-openssl
启用SSL
支持
使用操作系统提供的
libssl.so
动态连接库
--with-openssl-dir
启用SSL
支持 并 指定openssl
库的路径, 需跟上路径参数: --with-openssl-dir=/opt/openssl/
--enable-http2
开启对HTTP2
的支持
依赖
nghttp2
库, 在v4.3.0
后不再需要安装依赖, 改为内置, 但仍需要增加该编译参数来开启http2
支持
特殊参数
!> 如无历史原因不建议启用
--enable-mysqlnd
启用mysqlnd
支持,启用Coroutine\MySQL::escapse
方法。启用此参数后,PHP
必须有mysqlnd
模块,否则会导致Swoole
无法运行。
依赖
mysqlnd
模块
--enable-sockets
增加对php的sockets
资源的支持。开启此参数,swoole_event_add就可以添加sockets
扩展创建的连接到Swoole
的事件循环中。Server
和Client
的 getSocket()方法也需要依赖此编译参数。
依赖
sockets
扩展, v4.3.2后该参数的作用被削弱了, 因为Swoole内置的Coroutine\Socket可以完成大部分事情
Debug参数
!> 生产环境不可以启用
--enable-debug
打开调试模式。使用gdb
跟踪需要在编译Swoole
时增加此参数。
--enable-debug-log
打开内核DEBUG日志。(Swoole版本 >= 4.2.0)
--enable-trace-log
打开追踪日志,开启此选项后swoole将打印各类细节的调试日志,仅内核开发时使用
PHP编译参数
--enable-swoole
静态编译Swoole扩展到PHP中
!> 此选项是在编译PHP而不是Swoole时使用的