Node.js socket.io客户端重新连接超时

Node.js socket.io客户端重新连接超时,node.js,socket.io,Node.js,Socket.io,我将socket.io与node.js一起使用,我喜欢这个解决方案。我注意到的唯一问题是关于断开和重新连接 以下是我当前的设置: 'connect timeout': 1000, 'reconnect': true, 'reconnection delay': 300, 'max reconnection attempts': 10000, 'force new connection':true 我注意到,如果我停止并启动node.js进程,客户端会很快地重新连接,但是如果

我将socket.io与node.js一起使用,我喜欢这个解决方案。我注意到的唯一问题是关于断开和重新连接

以下是我当前的设置:

  'connect timeout': 1000,
  'reconnect': true,
  'reconnection delay': 300,
  'max reconnection attempts': 10000,
  'force new connection':true
我注意到,如果我停止并启动node.js进程,客户端会很快地重新连接,但是如果服务器离线几分钟,客户端可能永远不会重新连接,或者需要很长时间(非用户友好)才能连接

我想问一下,我是否遗漏了什么,或者可以添加到socket.io配置中,以保持客户端轮询以重新连接

我知道“重新连接延迟”:

重新连接延迟默认为
500
ms

开始重新连接的初始超时,使用 每次重新连接尝试时的指数退避算法 已经制作好了

但指数效应并不十分方便用户。是否有一种方法可以每隔X个时间段(例如:5秒)检查一次连接

如果没有,我想我可以编写一些客户端JS来检查连接,并在需要时尝试重新连接,但是如果socket.io客户端提供了这一功能,那就太好了


thx

编辑:有关正确的方法,请参见下面的答案

恐怕无法修改重联算法(截至2013年12月);允许此功能的列表尚未合并。然而,其中一位评论者提出了一个小的解决方案,它应该可以抵消指数增长:

socket.socket.reconnectionDelay/=2
on
重新连接

另一种方法是,如您所说,编写一些客户端代码来覆盖重新连接行为,并进行轮询。下面是如何做到这一点的示例

编辑:上述代码必须进入“断开连接”事件回调中:

var socket = io('http://localhost');
socket.on('connect', function(){
  socket.on('disconnect', function(){
      socket.socket.reconnectionDelay /= 2;
  });
});

这就是我使用的解决方案—当套接字断开连接时,它进入一个循环,该循环每3秒尝试重新连接一次,直到创建连接—效果很好:

  socket.on('disconnect', function() {
    socketConnectTimeInterval = setInterval(function () {
      socket.socket.reconnect();
      if(socket.socket.connected) {clearInterval(socketConnectTimeInterval);}
    }, 3000);
  });

干杯

有一个配置选项,
重新连接限制
(请参阅):

重新连接限制默认为
无限

  • 以毫秒或无穷大为单位的最大重新连接延迟
它可以设置如下:

io.set("reconnection limit", 5000);

设置后,重新连接延迟将继续增加(根据指数退避算法),但仅增加到您指定的最大值。

代码中是否有关于上述解决方法的信息?我假设客户端在代码中的什么位置?解决方法应该在“断开连接”事件处理程序中。检查我的编辑此选项准确回答问题,并应标记为正确答案。