我正在使用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
答案 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);
});
欢呼声