我用下一个代码创建socket.io连接
var socket = new io.connect('http://localhost:8181', {
'reconnect': true,
'reconnection delay': 500,
'max reconnection attempts': 50
});
但是当我杀死服务器 CTRL + C 并再次启动时,重新连接没有发生。但在客户端提出了断开事件。这可能是什么原因?
答案 0 :(得分:29)
这是一个老问题,但对于像我这样的其他人,正在寻找如何在 socket.io(1.x)中配置重新连接的方法是正确的语法:
var socket = new io.connect('http://localhost:8181', {
'reconnection': true,
'reconnectionDelay': 1000,
'reconnectionDelayMax' : 5000,
'reconnectionAttempts': 5
});
答案 1 :(得分: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'
这可以让您更深入地了解客户端套接字的状态。
此外,尝试查看Web检查器的“网络”选项卡,查看是否将XHR请求作为回退。最后,在您的Web控制台中,尝试键入io.sockets并将其展开以查看它是否实际上是否尝试重新连接。
我遇到了reconnect_failed没有触发的问题,并且重新连接没有重置。以下是在github上讨论这些问题的链接。
reconnection delay - exponential back off not resetting properly
答案 2 :(得分:6)
这是一个老问题,但在使用v1.4.5时我有同样的问题(出于不同的原因)。我的聊天室应用程序运行得很漂亮,但当我在终端中点击Ctrl+C
时,我的浏览器继续循环并每隔几秒报告一次ERR_CONNECTION_REFUSED,直到我关闭它。
稍微改变之前的答案给了我解决方案。
对于v1.4.5,这是我的原始代码" var socket"在我的客户端js文件中:
var socket = io();
这是解决方案:
var socket = io({
'reconnection': true,
'reconnectionDelay': 1000,
'reconnectionDelayMax' : 5000,
'reconnectionAttempts': 5
});
显然,如果我愿意,我可以更改值,但重要的是,这会终止永无止境的重新连接请求。
答案 3 :(得分:0)
重新连接延迟太小500ms增加,除此之外,50次重试意味着500 * 50 = 25000 ms,这是25秒。如果这无助于在客户端设置错误事件超时以重新创建套接字对象(错误和一些延迟重试后创建连接)。