2013-12-13 211 views
3

我使用socket.io与node.js,我喜欢解决方案。我注意到的唯一问题是断开连接和重新连接。socket.io客户端重新连接超时

这是我的当前设置:

'connect timeout': 1000, 
    'reconnect': true, 
    'reconnection delay': 300, 
    'max reconnection attempts': 10000, 
    'force new connection':true 

我发现,如果我停止和启动Node.js的处理客户端连接回精和快,但是如果服务器几分钟的客户端离线要么不重新连接,要么需要非常长的时间(非用户友好的)。

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

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

重新连接延时默认为500毫秒

初始超时开始重新连接,这是用增加的 指数退避算法每次新重联已尝试 。

但是它的指数效应不是非常用户友好。是否有一种方法可以每隔X个时间周期检查一次连接 - 例如:5秒。

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

THX

回答

4

恐怕重新连接算法不能被修改(截至12月2013年);允许此功能的Github issue尚未合并。然而,评论者之一是在暗示一个小的解决办法,这应该抵消了指数增长:

socket.socket.reconnectionDelay /= 2reconnecting

另一种方法是,如你所说,写一些客户端代码覆盖重新连接行为,并进行轮询。这是如何完成这个的example

编辑:上面的代码将不得不去的“断开”事件回调中:

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

有没有关于上述解决方法在代码中的位置的任何信息?客户端我假设,但在代码中? – Adam

+0

看起来像它的黑客socket.io-client.js文件... – Adam

+0

解决方法将进入您的'断开'事件处理程序。检查我的编辑 – verybadalloc

3

这是我去的解决方案 - 当插座断开它进入一个循环,不断尝试重新连接每3秒钟后直到建立了连接 - 工程请客:

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

欢呼

18

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

重新连接限制默认为Infinity

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

它可以进行如下设置:

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

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

+3

这完全回答了问题,应该标记为正确的答案。 –

相关问题