环境依赖
仅支持 Linux、FreeBSD、MacOS 三种操作系统
在Windows平台,可使用CygWin或WSL(Windows Subsystem for Linux)
Linux 内核版本 2.3.32 以上
gcc4.4 以上版本或者clang
4.x版本起需要gcc-4.8或更高版本, 编译失败请先尝试升级gcc
编译为 libswoole.so 作为 C/C++ 库时需要使用 cmake-2.4 或更高版本
建议使用 Ubuntu14、CentOS7、MAC10.14.0或更高版本的操作系统
PHP版本依赖
Swoole-4.x需要 PHP-7.1.0 或更高版本
不依赖 PHP 的 stream、sockets、pcntl、posix、sysvmsg 等扩展。PHP 只需安装最基本的扩展即可
ARM平台(树莓派Raspberry PI)
请使用 1.7.10 或更高版本
使用 GCC 交叉编译
在编译 Swoole 时,需要手工修改 Makefile 去掉 -O2 编译参数
MIPS平台(OpenWrt路由器)
请使用 swoole-1.7.21 或更高版本
使用 GCC 交叉编译
CygWin环境支持(Windows系统)
swoole-1.7.7 增加了对 cygwin 环境的支持,在 Windows 环境下,可以直接使用 cygwin + php 来跑 swoole 程序。
安装 cygwin,并安装 gcc、make、autoconf、php 4个包
下载swoole源码,在 cygwin-shell 中进行 phpize/configure/make/make install
修改 php.ini,加入 swoole.so
cygwin 模式下需要对 PHP 进行简化,去掉不使用的扩展,避免进程占用内存过大,导致 Fork 操作失败
BashOnWindows
Windows 10 系统增加了 Linux 子系统支持,BashOnWindows 环境下也可以使用 swoole。安装命令
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
BashOnWindows 环境下必须关闭 daemonize 选项
需要修改 config.h 关闭 HAVE_SIGNALFD
DockerOnWindows
在 Windows 下开发可以使用 Hyper-V+Docker 来方便的开发 Swoole 应用,安装好 Docker 后再 Settings 里的 Shared Droves 选项里共享代码所在磁盘。然后使用如下命令来快速启动 Docker 容器。
e:/path/to 为源码所在路径
/app 为容器内路径
在 bash 里执行 cd /app && php server.php
编译安装
Swoole扩展是按照PHP标准扩展构建的。使用phpize来生成编译检测脚本,./configure来做编译配置检测,make进行编译,make install进行安装。
请下载releases版本的swoole,直接从github主干上拉取最新代码可能会编译不过
如无特殊需求, 请务必编译安装swoole的最新版本
如果当前用户不是root,可能没有PHP安装目录的写权限,安装时需要sudo或者su
如果是在git分支上直接git pull更新代码,重新编译前务必要执行make clean
安装准备
PHP 7.0或更高版本[7.2.9]
Swoole 4.x.0以上版本[4.2.8]
redis[4.2.0]
mysqli
pdo
hiredis
sockets
mysqlnd
编译示例
cd swoole
sudo phpize (找不到,需要指定php的bin下的phpize)
sudo ./configure --with-php-config=php的bin下的php-config --enable-sockets --enable-http2 --enable-async-redis --enable-mysqlnd
sudo make && make install
配置php.ini
编译安装成功后,修改php.ini加入
extension=swoole.so
重启php-fpm
通过php -m或phpinfo()来查看是否成功加载了swoole.so,如果没有可能是php.ini的路径不对,可以使用php --ini来定位到php.ini的绝对路径。
hiredis安装
github地址:https://github.com/redis/hiredis
cd /deps/hiredis
sudo make && make install
sudo mkdir /usr/lib/hiredis
sudo cp libhiredis.so /usr/lib/hiredis //将动态连接库libhiredis.so至/usr/lib/hiredis
sudo mkdir /usr/include/hiredis
sudo cp hiredis.h /usr/include/hiredis
http2
依赖nghttp2库
mac安装:brew install nghttp2
nginx配置
看个人喜好,可选择不配置
server {
listen 80;
root WORKERDIR/swoole/;
server_name swoole-test.cn;
location / {
#如果$uri对应的文件存在,在nginx处理,否则把请求交给swoole处理
try_files $uri @swoole;
}
location @swoole {
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_set_header Host $host;
}
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;