環境依賴
- 僅支持 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;