當前位置:
首頁 > 最新 > php+Swoole——編譯安裝

php+Swoole——編譯安裝

1.Swoole編譯安裝步驟

Swoole擴展是按照php標準擴展構建的。使用phpize來生成php編譯配置,./configure來做編譯配置檢測,make進行編譯,make install進行安裝。

  • 請下載releases版本的swoole,直接從github主幹上拉取最新代碼可能會編譯不過

  • 如果當前用戶不是root,可能沒有php目錄的寫許可權,安裝時需要sudo或者su

  • 如果是在git分支上直接git pull更新代碼,重新編譯前務必要執行make clean

安裝準備

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

php-5.3.10或更高版本gcc-4.4或更高版本makeautoconf

下載地址

下載源代碼包後,在終端進入源碼目錄,執行下面的命令進行編譯和安裝

cdswoolephpize./configuremake sudo make install

(註:swoole的./configure有很多額外參數,可以通過./configure --help命令查看,這裡僅開啟其中async-mysql項,其他均選擇默認項) 這裡是./configure編譯配置的額外參數,用於開啟某些特性

1.8.7或更高版本不再需要設置--enable-async-mysql和--enable-async-httpclient,async_mysql和async_httpclient改為內置

--enable-swoole-debug

打開調試日誌,開啟此選項後swoole將列印各類細節的調試日誌。生產環境不要啟用。

--enable-sockets

增加對sockets資源的支持,依賴sockets擴展。開啟此參數,swoole_event_add就可以添加sockets擴展創建的連接到swoole的事件循環中。

--enable-async-mysql

增加非同步mysql支持, 依賴mysqli和mysqlnd擴展。

--enable-async-redis

增加非同步Redis客戶端支持, 依賴hiredis庫

--enable-async-httpclient

增加非同步Http和WebSocket客戶端支持

--enable-ringbuffer

開啟RingBuffer內存池

此設置為試驗性質,主要用於提升性能,生產環境請不要開啟

--enable-openssl

啟用SSL支持

--with-php-config=/url/local/php/bin/php-config

PECL

swoole項目已收錄到PHP官方擴展庫,除了手工下載編譯外,還可以通過PHP官方提供的pecl命令,一鍵下載安裝swoole

peclinstall swoole

配置php.ini

編譯安裝成功後,修改php.ini加入

extension=swoole.so

通過php -m或phpinfo()來查看是否成功載入了swoole,如果沒有可能是php.ini的路徑不對,可以使用php -i grep php.ini來定位到php.ini的絕對路徑。

安裝成功後通過phpinfo()查看到的信息:

2.構建一個Swoole基本實例

下面貼一個基本的基於swoole的echo伺服器

// Server

classServer{

private$serv;

publicfunction__construct() {

$this->serv=newswoole_server("0.0.0.0",9501);

$this->serv->set(array(

"worker_num"=>8,

"daemonize"=>false,

"max_request"=>10000,

"dispatch_mode"=>2,

"debug_mode"=>1

));

$this->serv->on("Start",array($this,"onStart"));$this->serv->on("Connect",array($this,"onConnect"));$this->serv->on("Receive",array($this,"onReceive"));$this->serv->on("Close",array($this,"onClose"));$this->serv->start();

}

publicfunctiononStart($serv) {

echo"Start
";

}

publicfunctiononConnect($serv,$fd,$from_id) {

$serv->send($fd,"Hello {$fd}!");

}

publicfunctiononReceive(swoole_server$serv,$fd,$from_id,$data) {

echo"Get Message From Client {$fd}:{$data}
";

}

publicfunctiononClose($serv,$fd,$from_id) {

echo"Client {$fd} close connection
";

}

}

// 啟動伺服器

$server=newServer();

從代碼中可以看出,創建一個swoole_server基本分三步: 1. 通過構造函數創建swoole_server對象 2. 調用set函數設置swoole_server的相關配置選項 3. 調用on函數設置相關回調函數 關於set配置選項以及on回調函數的具體說明,請參考我整理的swoole文檔( 配置選項)

這裡只給出簡單介紹。onStart回調在server運行前被調用,onConnect在有新客戶端連接過來時被調用,onReceive函數在有數據發送到server時被調用,onClose在有客戶端斷開連接時被調用。 這裡就可以大概看出如何使用swoole:在onConnect處監聽新的連接;在onReceive處接收數據並處理,然後可以調用send函數將處理結果發送出去;在onClose處處理客戶端下線的事件。

下面貼出客戶端的代碼:

classClient{

private$client;

publicfunction__construct() {

$this->client=newswoole_client(SWOOLE_SOCK_TCP);

}

publicfunctionconnect() {

if(!$this->client->connect("127.0.0.1",9501,1) ) {echo"Error: {$fp->errMsg}[{$fp->errCode}]
";

}

$message=$this->client->recv();

echo"Get Message From Server:{$message}
";

fwrite(STDOUT,"請輸入消息:");

$msg=trim(fgets(STDIN));

$this->client->send($msg);

}

}

$client=newClient();

$client->connect();

這裡,通過swoole_client創建一個基於TCP的客戶端實例,並調用connect函數向指定的IP及埠發起連接請求。隨後即可通過recv()和send()兩個函數來接收和發送請求。需要注意的是,這裡我使用了默認的同步阻塞客戶端,因此recv和send操作都會產生網路阻塞。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 阿炳大話PHP 的精彩文章:

TAG:阿炳大話PHP |