CentOS7+PHP7.4下編譯安裝Swoole4.4.*

安裝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 以上內核)、FreeBSDMacOS 三種操作系統,低版本 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 代替,xhprofblackfire 和 molten 可以用 SwooleTracker 代替。

安裝準備

安裝前必須保證系統已經安裝了下列軟件

  • php-7.1 或更高版本
  • gcc-4.8 或更高版本
  • make
  • autoconf

快速安裝

1. 下載 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章