Swoole 高效能php框架

不言
發布: 2023-03-24 19:42:01
原創
2540 人瀏覽過

這篇文章主要介紹了關於Swoole 高效能php框架,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

之前學習過了, nodejs ,性能強大。

今年的目標是深入workman,並運用swool 。之前用workman去處理聊天系統,工作需要是在window上運作的。所以性能來說,沒有發揮workman的有的優勢。

在這個月中, 剛好專案需要,運用swoole開發了,微信小程式商城的客服聊天系統的介面。

透過微信官方提供的接口,實現客戶和客服的聊天。

Swoole 高效能php框架

利用swoole 能輕鬆的搞定websocket,線上聊天。

發送訊息給指定使用者的前提

當一個客戶端連結socket 的時候, 系統會指派一個fd ,fd 是識別單獨的客戶端。
登入的時候,客服端可以傳送使用者的訊息給swoole,包含客服的id。

為了為指定的客戶或群組發送訊息,把客服id和對應的fd 存入redis。打開socket時,發送給某個客服的時候,只需要讀取redis的客服相應的key就能發送給指定的用戶。

非同步

雖然現在的諮詢量不大, 為了程式碼的壽命,能用得更久一點, 在客服發送訊息的時候,和接受訊息的時候加了 task異步。諮詢量大的時候swoole也能游刃有餘。

非同步儲存log

聊天,不像是寫文章。可能一秒鐘有上萬次的諮詢量,所以為了能讓系統流暢,在不必要耗時操作上,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(&#39;open&#39;,[$this,&#39;open&#39;]);        
        $this->server->on(&#39;message&#39;, [$this,&#39;message&#39;]);        
        $this->server->on(&#39;close&#39;, [$this,&#39;close&#39;]);        
        $this->server->on(&#39;request&#39;, [$this,&#39;request&#39;]);        
        $this->server->on(&#39;task&#39;,[$this,&#39;task&#39;]);        
        $this->server->on(&#39;finish&#39;,[$this,&#39;finish&#39;]);        
        $this->server->set([//            &#39;daemonize&#39;=>true,
        &#39;task_worker_num&#39;=>10,
        ]);        $this->server->start();
    }    //@异步接受数据, 发送数据
    function finish($server, $task_id,$data){
        $server->push($data[&#39;fd&#39;],$data[&#39;data&#39;]);
    }    //@异步处理数据
    function task($server, $task_id, $from_id, $data){
        //接受到数据之后处理复杂逻辑处理
        sleep(&#39;5&#39;);        
        $data[&#39;data&#39;] = &#39;服务器发送&#39;.$data[&#39;data&#39;];        
        $server->finish($data);
    }    
    function request($request, $response) {
        foreach ($this->server->connections as $fd) {            
        $this->server->push($fd, $request->get[&#39;message&#39;]);
        }
    }    function close($ser, $fd) {
        echo "client {$fd} closed\n";
    }    function message(swoole_websocket_server $server, $frame) {
        $data = [            
        &#39;fd&#39;=>$frame->fd,            &#39;data&#39;=>$frame->data,
        ];        
        $server->task($data);
    }    function open( $server, $request) {

    }
}new WebsocketTest();
登入後複製

以上是Swoole 高效能php框架的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!