如何在socket.io中配置重新连接?

Dmi*_*tro 27 javascript websocket node.js socket.io

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

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

但是,当我杀死服务器CTRL+C并再次启动它时,重新连接不会发生.但在客户端提出了断开事件.这可能是什么原因?

Sal*_*ali 30

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

var socket = new io.connect('http://localhost:8181', {
    'reconnection': true,
    'reconnectionDelay': 1000,
    'reconnectionDelayMax' : 5000,
    'reconnectionAttempts': 5
});
Run Code Online (Sandbox Code Playgroud)


cap*_*lam 10

我意识到这是一个老问题,但我在socket 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'
Run Code Online (Sandbox Code Playgroud)

这可以让您更深入地了解客户端套接字的状态.

此外,尝试查看Web检查器的"网络"选项卡,查看是否将XHR请求作为回退.最后,在您的Web控制台中,尝试键入io.sockets并将其展开以查看它是否实际尝试重新连接.

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

重新连接延迟 - 指数后退不能正确复位

reconnect_failed永远不会被触发

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


小智 7

这是一个老问题,但在使用v1.4.5时我有同样的问题(出于不同的原因).我的聊天室应用程序工作Ctrl+C得很漂亮,但当我点击终端时,我的浏览器继续循环并每隔几秒报告一次ERR_CONNECTION_REFUSED,直到我关闭它.

稍微更改以前的答案给了我解决方案.

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

    var socket = io();
Run Code Online (Sandbox Code Playgroud)

这是解决方案:

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

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


MaX*_*MaX 0

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

  • 在 socket.io-client 的文档中,我读到“我们再次尝试连接到服务器之前的毫秒数。我们对以下重新连接使用指数退避算法,在每次重新连接尝试时,该值都会乘以(500 > 1000 > 2000 > 4000 > 8000)。” 所以它会大于 25000ms (4认同)