Node.js socket.io客户端重新连接超时
我将socket.io与node.js一起使用,我喜欢这个解决方案。我注意到的唯一问题是关于断开和重新连接 以下是我当前的设置: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进程,客户端会很快地重新连接,但是如果
'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);
设置后,重新连接延迟将继续增加(根据指数退避算法),但仅增加到您指定的最大值。代码中是否有关于上述解决方法的信息?我假设客户端在代码中的什么位置?解决方法应该在“断开连接”事件处理程序中。检查我的编辑此选项准确回答问题,并应标记为正确答案。