繁体   English   中英

Socket.io授权失败不会重试重新连接

[英]Socket.io failing authorization does not retry to reconnect

我使用带有简单令牌身份验证方法(服务器端)的套接字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();
}

});

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

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;
            });

如何重试与另一个参数的重新连接?

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

                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
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM