這篇文章主要介紹了關於Swoole 高效能php框架,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
之前學習過了, nodejs ,性能強大。
今年的目標是深入workman,並運用swool 。之前用workman去處理聊天系統,工作需要是在window上運作的。所以性能來說,沒有發揮workman的有的優勢。
在這個月中, 剛好專案需要,運用swoole開發了,微信小程式商城的客服聊天系統的介面。
透過微信官方提供的接口,實現客戶和客服的聊天。
利用swoole 能輕鬆的搞定websocket,線上聊天。
當一個客戶端連結socket 的時候, 系統會指派一個fd ,fd 是識別單獨的客戶端。
登入的時候,客服端可以傳送使用者的訊息給swoole,包含客服的id。
為了為指定的客戶或群組發送訊息,把客服id和對應的fd 存入redis。打開socket時,發送給某個客服的時候,只需要讀取redis的客服相應的key就能發送給指定的用戶。
雖然現在的諮詢量不大, 為了程式碼的壽命,能用得更久一點, 在客服發送訊息的時候,和接受訊息的時候加了 task異步。諮詢量大的時候swoole也能游刃有餘。
聊天,不像是寫文章。可能一秒鐘有上萬次的諮詢量,所以為了能讓系統流暢,在不必要耗時操作上,swoole提供非同步讀寫,幫助我們讀寫log。
function log_text($data){ swoole_async_writefile(__DIR__ . '/log.txt', $data.$data."\n\n", function($filename) { }, FILE_APPEND); }
物件導向類別
<?phpclass WebsocketTest { public $server; public function __construct() { $this->server = new swoole_websocket_server("0.0.0.0", 7272); $this->server->on('open',[$this,'open']); $this->server->on('message', [$this,'message']); $this->server->on('close', [$this,'close']); $this->server->on('request', [$this,'request']); $this->server->on('task',[$this,'task']); $this->server->on('finish',[$this,'finish']); $this->server->set([// 'daemonize'=>true, 'task_worker_num'=>10, ]); $this->server->start(); } //@异步接受数据, 发送数据 function finish($server, $task_id,$data){ $server->push($data['fd'],$data['data']); } //@异步处理数据 function task($server, $task_id, $from_id, $data){ //接受到数据之后处理复杂逻辑处理 sleep('5'); $data['data'] = '服务器发送'.$data['data']; $server->finish($data); } function request($request, $response) { foreach ($this->server->connections as $fd) { $this->server->push($fd, $request->get['message']); } } function close($ser, $fd) { echo "client {$fd} closed\n"; } function message(swoole_websocket_server $server, $frame) { $data = [ 'fd'=>$frame->fd, 'data'=>$frame->data, ]; $server->task($data); } function open( $server, $request) { } }new WebsocketTest();
以上是Swoole 高效能php框架的詳細內容。更多資訊請關注PHP中文網其他相關文章!