swoole搭建websocket

後臺搭建websocket需要一臺服務器、需要服務器裏配置swoole擴展:

定義:開放端口:9503   ,如果是阿里雲服務器需要在安全裏也開放9503端口;

swoole儘量安裝最新版,這裏我安裝的4.3.3版本,支持的方法會更強勁  

swoole文檔:https://wiki.swoole.com/

下面是代碼:

       //創建websocket服務器

        $server = new \swoole_websocket_server("0.0.0.0", 9503);

        //監聽WebSocket連接打開事件
        $server->on('open', function ($server, $request) use($output) {
            $this->onOpen($server, $request, $output);
        });

        //監聽WebSocket消息事件
        $server->on('message', function ($server, $frame) use($output) {
            $this->onMessage($server, $frame, $output);
        });

        //監聽WebSocket關閉消息事件
        $server->on('close', function ($server, $fd) {
            $this->onClose($server, $fd);
        });

        $server->start();

開啓後進行監聽方法的處理:

/**
     * 監聽打開webSocket,進行相應處理
     * @param $server
     * @param $request
     * @param $output
     */
    private function onOpen($server, $request, $output){
    }

/**
     * 監聽打開webSocket,獲取當前用戶連接
     * @param $server 當前服務
     * @param $frame  連接參數、前端發送的消息都會在這裏面
     * @param $output
     */
    private function onMessage($server, $frame, $output){

           $data = json_decode($frame->data,true);//獲取當前前端發送數據

           $fd     = $frame->fd;//當前客戶端連接的標識;

           $server->connections;這個方法是獲取當前所有連接服務器的客戶端;這個是一個二維所以需要循環進行獲取

           $server->isEstablished($fd);這個方法是判斷當前這個客戶端是否連接正常,如果連接已經斷開我們需要進行處理;          

    }

/**
     * 監聽關閉webSocket
     * @param $server   
     * @param $request
     * @param $redis
     */
    public function onClose($server, $fd)
    {

          //只有客戶端主動斷開連接後,我們才能觸發此方法;我感覺很雞肋,客戶端再次連接就是新的連接標識;所以需要一些方法進行處理

    }

 

如果需要實時的推送一些消息方法;但是我們希望的是一直監聽着是否有推送的:

        //循環進行發送消息
        $process = new \swoole_process(function($process) use ($server) {
            $this->WebSocketRpushList($server);
        });
        $server->addProcess($process);//添加一個自定義的工作進程

在:$server->start() ;之前需要加入上面4個行代碼;

處理邏輯和發送方法需要根據自己業務需求進行編寫;

代碼處理好後;我們在連接的時候可能在連接的時候不想把端口號寫到前端:

可以用nginx反向代理;

以上就是一些簡單的操作;進行連接了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章