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

Ada*_*dam 5 node.js socket.io

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

这些是我目前的设置:

  'connect timeout': 1000,
  'reconnect': true,
  'reconnection delay': 300,
  'max reconnection attempts': 10000,
  'force new connection':true
Run Code Online (Sandbox Code Playgroud)

我注意到如果我停止并启动node.js进程,客户端连接回来很快很快,但是如果服务器离线几分钟,客户端要么永远不会重新连接,要么花费很长时间(非用户友好)的时间至.

我想询问是否有任何我错过的或者可以添加到socket.io配置中以保持客户端轮询重新连接.

我知道'重新连接延迟':

重新连接延迟默认为500ms

启动重新连接的初始超时,每次进行新的重新连接尝试时,使用指数退避算法会增加此超时.

但指数效应不是非常用户友好.有没有办法在每个X时间段内继续检查连接 - 例如:5秒.

如果不是,我想我可以写一些客户端JS来检查连接并尝试重新连接,如果需要但是如果socket.io客户端提供这个将是很好的.

谢谢

Luk*_*kas 20

有一个配置选项,reconnection limit(参见配置Socket.IO):

重新连接限制默认为Infinity

  • 最大重新连接延迟(以毫秒为单位)或无穷大.

它可以设置如下:

io.set("reconnection limit", 5000);
Run Code Online (Sandbox Code Playgroud)

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

  • 这完全回答了问题,应该标记为正确的答案. (3认同)

ver*_*loc 5

编辑:请参阅下面的答案以获取正确的方法

恐怕无法修改重新连接算法(截至2013年12月);在Github上的问题,让这项功能不合并呢。但是,评论者之一建议采取一种较小的解决方法,该方法应使指数增加无效:

socket.socket.reconnectionDelay /= 2 上 reconnecting

如您所说,另一种方法是编写一些客户端代码以覆盖重新连接行为并进行轮询。这是如何完成此操作的示例。

编辑:上面的代码将必须进入'disconnect'事件回调内:

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