环境依赖
- 仅支持 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 或更高版本
建议使用 Ubuntu1四、CentOS七、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;