安裝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
擴展大量使用了全局變量 可能會導致 Swoole
協程發生崩潰。請關閉以下相關擴展:
- xdebug
- phptrace
- aop
- molten
- xhprof
- phalcon(
Swoole
協程無法運行在phalcon
框架中)
其中 xdebug
和 phptrace
可以用 sdebug 代替,xhprof
、blackfire
和 molten
可以用 SwooleTracker 代替。
安裝準備
安裝前必須保證系統已經安裝了下列軟件
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
git clone https://github.com/swoole/swoole-src/releases swoole-src
cd swoole-src && \
phpize && \
./configure && \
--enable-openssl \
--enable-http2 && \
make && sudo make install
也可採用以下進階編譯示例:
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
3. 啓用擴展
編譯安裝到系統成功後,需要在 php.ini
中加入一行 extension=swoole.so
來啓用 Swoole 擴展
快速啓動
cd ~/swoole-src/examples/server
php echo.php
執行上邊代碼中echo.php內容爲:
<?php
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
$serv = new swoole_server("0.0.0.0", 9501);
//$serv->on('connect', function ($serv, $fd, $reactor_id){
// echo "[#".posix_getpid()."]\tClient@[$fd:$reactor_id]: Connect.\n";
//});
$serv->set(array(
'worker_num' => 1,
));
$serv->on('receive', function (swoole_server $serv, $fd, $reactor_id, $data) {
echo "[#".$serv->worker_id."]\tClient[$fd] receive data: $data\n";
if ($serv->send($fd, "hello {$data}\n") == false)
{
echo "error\n";
}
});
//$serv->on('close', function ($serv, $fd, $reactor_id) {
// echo "[#".posix_getpid()."]\tClient@[$fd:$reactor_id]: Close.\n";
//});
$serv->start();
然後查看端口9501是否已經啓用:
netstat -anp | grep 9501
顯示如下即爲成功:
詳細教程可移步swoole官網wiki:swoole-wiki