集成在THinkPHP的ws类同时作为http_server用,接收websocket时不进入onOpen等回调

来源:8-14 赛事直播在线用户处理 - redis方案(基础类库优化)

阿憨阿憨

2018-10-29

集成在THinkPHP的ws类同时作为http_server用,接收websocket时不进入onOpen等回调,同时也不会报错.


    public function __construct()
    {
        //把命名空间形式,改为下面的Zend命名的形式即可,原因未知,打开swoole的track日志也没显示
        //$this->ws = new \Swoole\Http\Server(self::HOST, self::PORT);
        $this->ws = new swoole_websocket_server(self::HOST, self::PORT);
        $this->ws->set([
            'enable_static_handler' => true,
            //开启静态页面支持
            //    'document_root'         => '/workspace/imooc_swoole/thinkphp_5.1.0_rc/public/static',   //指定静态页面路径
            'document_root'         => '/Users/liuhao/workspace/myProject/imooc_swoole/thinkphp_5.1.0_rc/public/static',
            //指定静态页面路径
            'worker_num'            => 4,
            'task_worker_num'       => 4,
            'log_level'             => SWOOLE_LOG_NOTICE,
        ]);
        //因为websocket是继承自httpServer的所以这里可以直接用websocket来做httpserver
        $this->ws->on('open', [$this, 'onOpen']);
        $this->ws->on('message', [$this, 'onMessage']);
        $this->ws->on('workerstart', [$this, 'onWorkerStart']);
        $this->ws->on('request', [$this, 'onRequest']);
        //task任务处理的回调
        $this->ws->on('task', [$this, 'onTask']);
        //task任务处理完毕的回调
        $this->ws->on('finish', [$this, 'onFinish']);
        //激活连接断开的回调
        $this->ws->on('close', [$this, 'onClose']);
        //打开服务
        $this->ws->start();
    }
写回答

2回答

阿憨阿憨

提问者

2018-10-30


public function onOpen($ws, $request)
{
    //这里的redis是没问题的
   \app\common\lib\Predis::getInstance()->sAdd(config('redis.live_redis_key'), $request->fd);

   var_dump('客户端' . $request->fd . '开始连接');
}


我把构造函数里的

 //原来用命名空间的形式会报错把命名空间形式改为下面的Zend命名的形式就没这个问题了,,打开swoole的track日志也没显示
       //$this->ws = new \Swoole\Http\Server(self::HOST, self::PORT);
       $this->ws = new swoole_websocket_server(self::HOST, self::PORT);


我的版本swoole4.2.3,后来更新到了swoole4.2.5后也没有这个问题了

0
0

singwa

2018-10-30

您好 您回调函数onOpen是如何写的,截图我看看把。

0
2
singwa
回复
阿憨阿憨
更新4.2.5后问题解决了是吧? 那可能和版本有关。
2018-10-30
共2条回复

Swoole入门到实战打造高性能赛事直播平台

swoole创始人推荐,借助Swoole打造高性能直播平台

2228 学习 · 1062 问题

查看课程