我正在使用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)
设置后,重新连接延迟将继续增加(根据指数退避算法),但仅限于您指定的最大值.
编辑:请参阅下面的答案以获取正确的方法
恐怕无法修改重新连接算法(截至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)
| 归档时间: |
|
| 查看次数: |
18253 次 |
| 最近记录: |