[英]Why does the reconnect function not trigger on manual reconnect 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.