我有一个运行正常的node.js / socket.io应用程序。每次客户端失去连接时,它都会尝试使用socket.io预定义进程重新连接:
var io = io.connect("/", {
'reconnect': true,
'reconnection delay': 1000,
'reconnection limit': 5000,
'max reconnection attempts': 100
});
这适用于除Internet Explorer之外的所有浏览器。我在所有重新连接事件上添加了一些警报,以检查问题所在:
io.on('disconnect', function(){ alert('Disconnected!'); });
io.on('reconnect_failed', function(){ alert('FAILED'); });
io.on('reconnect', function(){ alert('OK'); });
io.on('reconnecting', function( nextRetry ){ alert('Reconnecting...'); });
当我停止socket.io服务器(或客户端连接丢失)时,所有客户端都会收到“on disconnect”消息。没问题。
所有客户每隔5秒钟就会收到“重新连接...”消息 直到连接恢复,如果是,他们会得到最后的OK消息。
如果IE尝试重新连接时服务器仍处于关闭状态(第一个 时间),客户端不会继续尝试重新连接,甚至何时 服务器再次启动用户永远不会连接,直到刷新 页。由于断开事件,客户端获得“重新连接...” 消息只有一次。
正如加号测试一样,如果在IE客户端尝试重新连接之前恢复服务器,则客户端会重新连接成功。
我在这里发现了这个问题:https://github.com/LearnBoost/socket.io/issues/1020。但他们没有找到解决方案。我以dinamically方式提供socket.io.js文件,所以我不能按照他们建议的方式对其进行编辑。
谢谢!
答案 0 :(得分:0)
这是我解决socket.io 0.9.6 / ie8:
这个问题的方法 var _socket = io.connect();
...
_socket.on('disconnect', function(){
var interval = setInterval(function () {
if (_socket.socket.connected) {
clearInterval(interval);
} else {
_socket.socket.disconnect();
_socket.socket.reconnect();
}
}, 31000);
});
插入到文档中的先前jsonp脚本需要31秒间隔才能超时,当服务器可用时,会触发其他多个连接事件(多个套接字连接)。