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

时间:2013-12-13 02:52:46

标签: 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配置中以保持客户端轮询重新连接。

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

  

重新连接延迟默认为500 ms

     

启动重新连接的初始超时,使用a增加   每次重新连接尝试时,指数退避算法   已经完成了。

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

如果不是,我想我可以编写一些客户端JS来检查连接并在需要时尝试重新连接但是如果socket.io客户端提供此功能会很好。

thx

3 个答案:

答案 0 :(得分:20)

有一个配置选项reconnection limit(请参阅Configuring Socket.IO):

  

重新连接限制默认为Infinity

     
      
  • 最大重新连接延迟,以毫秒为单位,或无穷大。
  •   

可以设置如下:

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

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

答案 1 :(得分:4)

我担心重新连接算法无法修改(截至2013年12月); Github issue允许此功能尚未合并。然而,其中一位评论员提出了一个小的解决方法,它应该使指数增长无效:

  socket.socket.reconnectionDelay /= 2

上的

reconnecting

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

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

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

答案 2 :(得分:3)

这是我使用的解决方案 - 当套接字断开连接时,它进入一个循环,每隔3秒就会继续尝试重新连接,直到创建连接 - 这是一种享受:

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

欢呼声