1

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

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

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

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

1 回答 1

0

根据文档示例,您不应使用socket.disconnect();. 由于这条线,您的客户端error事件不会完全触发。

编辑:

您也可以尝试在重新连接时设置forceNewtrue连接选项:

var socket = io.connect(this.adress, {
    query: 'token=123456789',
    transports:['websocket', 'polling'],
    forceNew: true
});
于 2014-06-24T16:36:21.997 回答