套接字.IO授权失败不会重试重新连接

Socket.io failing authorization does not retry to reconnect

本文关键字:重试 重新连接 失败 IO 授权 套接字      更新时间:2023-09-26

我使用socket io和一个简单的令牌验证方法(服务器端):

io.use(function(socket, next){
var handshake = socket.request;
if(token == handshake._query.token)
{
    console.log('Client authorized');
    next();
}
else
{
    console.log('Client not authorized');
    next(new Error('not_authorized'));
    socket.disconnect();
}

});

问题是,如果客户端第一次授权失败(错误的令牌),它不会再尝试连接,即使我发送一个手动的新连接,它也不会重新连接,直到整个页面刷新。Cliend:

var socket = io.connect(this.adress, {query: 'token=123456789', transports:['websocket', 'polling'] });
socket.on('error', function(err){
                console.log(err);
                if(err == 'not_authorized')
                {
                    console.log('gettin toke');//NOT ENTERING HERE
                }
                PS.connected = false;
            });

如何重新连接其他参数?

解决方法,再次设置这些变量以重试连接:

                PS.socket.socket.connecting = false;
                PS.socket.socket.options.query = 'token='+tok;

根据文档示例,您不应该使用socket.disconnect();。由于这一行,您的客户端error事件没有触发。

编辑:

重新连接时,您也可以尝试在连接选项中将forceNew设置为true:

var socket = io.connect(this.adress, {
    query: 'token=123456789',
    transports:['websocket', 'polling'],
    forceNew: true
});