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反向代理;

以上就是一些简单的操作;进行连接了

 

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