32

我用下一个代码创建 socket.io 连接

var socket = new io.connect('http://localhost:8181', {
    'reconnect': true,
    'reconnection delay': 500,
    'max reconnection attempts': 50
});

但是当我杀死服务器CTRL+C并重新启动它时,重新连接没有发生。但是在客户端引发了断开连接事件。这可能是什么原因?

4

4 回答 4

37

这是一个老问题,但对于像我这样正在寻找如何在socket.io (1.x)中配置重新连接的其他人来说,这是一个正确的语法:

var socket = new io.connect('http://localhost:8181', {
    'reconnection': true,
    'reconnectionDelay': 1000,
    'reconnectionDelayMax' : 5000,
    'reconnectionAttempts': 5
});
于 2014-10-12T23:30:48.337 回答
11

我意识到这是一个老问题,但是我在重新连接套接字 io 时遇到了一些问题,并且在搜索结果中发现这篇文章很高,所以我想我会做出贡献。尝试使用以下代码准确调试正在触发的事件:

# coffeescript. compile if you're writing javascript, obviously.

socket.on 'connect',-> console.log 'connected'
socket.on 'reconnect',-> console.log 'reconnect'
socket.on 'connecting',-> console.log 'connecting'
socket.on 'reconnecting',-> console.log 'reconnecting'
socket.on 'connect_failed',-> console.log 'connect failed'
socket.on 'reconnect_failed',-> console.log 'reconnect failed'
socket.on 'close',-> console.log 'close'
socket.on 'disconnect',-> console.log 'disconnect'

这应该让您更深入地了解客户端套接字的状态。

另外,请尝试查看您的网络检查器的网络选项卡,看看它是否正在触发 XHR 请求作为后备。最后,在您的 Web 控制台中,尝试输入 io.sockets 并将其展开以查看它是否真的在尝试重新连接。

我遇到了 reconnect_failed 未触发的问题,并且重新连接计数未重置。以下是在 github 上讨论这些问题的链接。

重新连接延迟 - 指数回退未正确重置

reconnect_failed 永远不会被解雇

一些潜在的修复/解决方法

于 2012-10-18T03:50:02.710 回答
10

这是一个老问题,但我在使用 v1.4.5 时遇到了同样的问题(出于不同的原因)。我的聊天室应用程序运行良好,但是当我点击Ctrl+C终端时,我的浏览器继续循环并每隔几秒报告一次 ERR_CONNECTION_REFUSED,直到我将其关闭。

稍微改变以前的答案给了我解决方案。

对于 v1.4.5,这是我的客户端 js 文件中“var socket”的原始代码:

    var socket = io();

这是解决方案:

    var socket = io({
        'reconnection': true,
        'reconnectionDelay': 1000,
        'reconnectionDelayMax' : 5000,
        'reconnectionAttempts': 5
    });

显然,如果我愿意,我可以更改这些值,但重要的是这会杀死永无止境的重新连接请求。

于 2016-06-14T19:00:30.773 回答
0

重新连接延迟太小 500 毫秒增加,在 50 次重试之上意味着 500 * 50 = 25000 毫秒,即 25 秒。如果这无助于在客户端设置错误事件超时以重新创建套接字对象(在错误和一些延迟后重试创建连接)。

于 2012-07-24T17:09:19.947 回答