我有一个节点套接字服务器和一个客户端连接。
如果套接字服务器短时间内关闭,客户端可以在不做任何事情的情况下重新建立连接。但是,如果客户端长时间停机,则尝试从客户端重新连接尝试之间的延迟时间过长(重新连接尝试之间的延迟会因每次重新连接失败而延长)。
为了解决这个问题,我想将'max reconnection attempts'设置为一个小数字,如果它们已经用尽,我想运行自己的轮询代码。
我的问题是,如何知道客户端何时达到最大重新连接尝试限制?
即使套接字试图重新建立连接,也会调用 socket.on('disconnect')
,实际上可能会成功,因此尝试调用其他代码的位置也不正确。
这是我客户端代码中的一个小snipet:
function start_socket(){
console.log("socket trying to connect");
socket = io.connect('http://someip/', { 'force new connection': true , 'max reconnection attempts' : 0});
console.log("...here");
socket.on('connect', function() {
console.log('connected to server');
set_loggedin_status('true');
});
socket.on('something', function(link) {
console.log("something: " + something);
openTabWithURL(something);
});
socket.on('disconnect', function() {
console.log('disconnected from server');
set_loggedin_status('false');
close_socket();
});
socket.on('error',function(){
console.log('socket error');
});
}
function do_my_own_polling(){
//some code here.
}
答案 0 :(得分:1)
我认为您正试图以错误的方式实现结果:如果我理解正确,您需要继续使用固定的轮询延迟来寻找服务器。
当重新连接尝试的最大次数发生时(这需要额外的" meta"源代码),您可以配置socket.io来执行此操作,而不是启动自己的轮询机制。特别是,您可以尝试使用以下选项(来自https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO):
reconnection limit
:允许您在每次轮询/重新连接尝试之间设置最大时间延迟。例如,将此设置为3秒,socket.io将在500ms之后进行第一次轮询(这是reconnection delay
的默认值),第二次在1s之后,第三次在2s之后,但第四次将在之后3s而不是4.以下尝试的时间距离为3s; max reconnection attempts
:这将设置socket.io将进行的重新连接尝试次数:如果您希望socket.io永远尝试,请将其设置为" Infinity"。因此,以下内容将起作用:
socket = io.connect('http://someip/', {'reconnection limit' : 1000, 'max reconnection attempts' : 'Infinity'});