PHP的異步、並行、高性能網絡通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端/客戶端。
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 版本,選擇安裝不同的拓展,這邊安裝 brew install homebrew/php/php71-swoole,但我這里已經安裝好了,如果失敗,也通過源碼安裝brew reinstall php71-swoole --build-from-source
然后需要php.ini 中添加 extension = swoole.so,使用 php -m 看拓展有沒有生效,如果沒生效可以試試重啟 apache 服務器。
下面寫個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環境下執行:
文檔里面有一張圖,可以幫助我們理解