start_gateway 做鉴权,会一直跑是怎么回事啊?

zcz66341631
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
    $connection->onWebSocketConnect = function($connection , $http_header)
    {
        // 可以在这里判断连接来源是否合法,不合法就关掉连接
        // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
        if($_GET['token'] != '123uji')
        {
            $connection->close();
        }
        // onWebSocketConnect 里面$_GET $_SERVER是可用的
        // var_dump($_GET);
    };
}; 

前端JS
// 连接服务端
function connect() {
// 创建websocket
ws = new WebSocket("ws://"+document.domain+":7272?token=123uji2");
// 当socket连接打开时,输入用户名
ws.onopen = onopen;
// 当有消息时根据消息类型显示不同信息
ws.onmessage = onmessage;
ws.onclose = function() {
console.log("连接关闭,定时重连");
connect();
};
ws.onerror = function() {
console.log("出现错误");
};
}

拒绝后为什么控制台
client:51.55.41.246:59034 gateway:127.0.0.1:7272 client_id:7f00000108fd00000038 onClose:''
一直跑这个。。
PC我看会定时重连间隔1S左右
用手机一打开网页直接1S 10来条

1846 1 0
1个回答

six

你这个问题问得有点那啥了,这个明显是你业务逻辑有bug啊。

客户端onclose执行了重连,服务端判断token不对就断开,然后客户端重连,服务端再次判断token不对继续断开,重连,断开,重连,断开。。。。控制台就打印很多日志喽。。。

你服务断开的时候给客户端发个数据,告诉客户端你token不对,别TM再连了。

  • zcz66341631 2020-05-30

    好来

  • zcz66341631 2020-05-30

    不对啊,都还没建立连接,如何给他发数据。。

  • six 2020-06-01

    怎么就没建立呢,没建立你为啥调用$connection->close();?就在调用$connection->close();前发啊。。。。

年代过于久远,无法发表回答
🔝