请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

有办法区分 $server->connections 是http还是websocket么?

如果我启动的 \Swoole\WebSocket\Server ,然后有的请求是http过来的,有的是websocket过来的,都是同一个端口。那我要怎么区别 Server::$connections迭代出来的是http的请求客户端,还是websocket请求的客户端呢?

public function push()
    {
        $server = $_SERVER['swoole_server'];
        foreach($server->connections as $fd)
        {
            // Swoole\WebSocket\Server::push(): the connected client of connection[2] is not a websocket client or closed
            $server->push($fd, "你在干嘛呀!小子!");
        }

        echo "当前服务器共有 ".count($server->connections). " 个连接\n";
        return '';
    }

因为有的请求是http过来的,有的是websocket过来的,如果我直接这样foreach去push每个fd,就会报错

Swoole\WebSocket\Server::push(): the connected client of connection[2] is not a websocket client or closed

有办法区分 $server->connections 是http还是websocket么?

正在回答 回答被采纳积分+3

2回答

hen_nam 2021-08-07 23:42:52
foreach ($server->connections as $fd) {
    if ($server->isEstablished($fd)) {
        $server->push($fd, '...');
    }
}

https://wiki.swoole.com/#/websocket_server?id=isestablished

1 回复 有任何疑惑可以回复我~
qq_起个啥名呢_0 2019-03-07 20:22:42

我觉得既然是这样的话,那就不要用swoole提供的connections ,可以使用swoole的table或者redis,在onOpen回调中把fd保存一下,这样fd都是websocket的了

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信