我有一个运行良好的 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 服务器(或客户端连接丢失)时,所有客户端都会收到“断开连接”消息。没问题。
使用非 IE 的客户端
所有客户端每 5 秒不断收到“重新连接...”消息,直到连接恢复,如果是,他们会收到最终的 OK 消息。
使用 IE 的客户
如果在 IE 尝试重新连接(第一次)时服务器仍然处于关闭状态,则客户端不会继续尝试重新连接,即使服务器再次启动,用户也永远不会连接,直到刷新页面。由于断开事件,客户端只收到一次“重新连接...”消息。
作为一个加号测试,如果在 IE 客户端尝试重新连接之前恢复服务器,则客户端重新连接成功。
我在这里发现了这个问题:https ://github.com/LearnBoost/socket.io/issues/1020 。但他们没有找到解决办法。我以动态方式提供 socket.io.js 文件,因此我无法按照他们建议的方式对其进行编辑。
谢谢!