天天看點

php swoole 通信,PHP+Swoole 作為網絡通信架構

Swoole底層内置了異步非阻塞、多線程的網絡IO伺服器。PHP程式員僅需處理事件回調即可,無需關心底層。與Nginx/Tornado/Node.js等全異步的架構不同,Swoole既支援全異步,也支援同步。

除了異步IO的支援之外,Swoole為PHP多程序的模式設計了多個并發資料結構和IPC通信機制,可以大大簡化多程序并發程式設計的工作。其中包括了并發原子計數器,并發HashTable,Channel,Lock,程序間通信IPC等豐富的功能特性。

Swoole從2.0版本開始支援了内置協程,可以使用完全同步的代碼實作異步程式。PHP代碼無需額外增加任何關鍵詞,底層自動進行協程排程,實作異步。

在已經安裝的php環境下面需要安裝一下 Swoole 擴充,在文檔中說明了各種系統的,我這裡記錄一下自己這邊的操作,mac下用的brew 包管理:

php swoole 通信,PHP+Swoole 作為網絡通信架構

然後看看我的 php 版本,選擇安裝不同的拓展,這邊安裝 brew install homebrew/php/php71-swoole,但我這裡已經安裝好了,如果失敗,也通過源碼安裝brew reinstall php71-swoole --build-from-source

php swoole 通信,PHP+Swoole 作為網絡通信架構

然後需要php.ini 中添加 extension = swoole.so,使用 php -m 看拓展有沒有生效,如果沒生效可以試試重新開機 apache 伺服器。

php swoole 通信,PHP+Swoole 作為網絡通信架構

下面寫個demo 試試:

$serv = new swoole_server("127.0.0.1", 9501);$serv->on(‘connect‘, function ($serv, $fd){echo "Client:Connect.\n";

});$serv->on(‘receive‘, function ($serv, $fd, $from_id, $data) {$serv->send($fd, ‘Swoole: ‘.$data);$serv->close($fd);

});$serv->on(‘close‘, function ($serv, $fd) {echo "Client: Close.\n";

});$serv->start();

用戶端:

$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);$client->on("connect", function($cli) {$cli->send("hello world\n");

});$client->on("receive", function($cli, $data = ""){echo "Receive: ".$data.PHP_EOL;

});$client->on("error", function($cli){echo "connect fail\n";

});$client->on("close", function($cli){echo "connection close\n";

});$client->connect(‘127.0.0.1‘, 9501, 0.5);

然後需要在php-cli環境下執行:

php swoole 通信,PHP+Swoole 作為網絡通信架構
php swoole 通信,PHP+Swoole 作為網絡通信架構

文檔裡面有一張圖,可以幫助我們了解

php swoole 通信,PHP+Swoole 作為網絡通信架構

原文:https://www.cnblogs.com/wadhf/p/11827954.html