Javascript Socket.IO-如何更改客户端的超时值选项?
我使用Socket.IO0.9.16建立连接:Javascript Socket.IO-如何更改客户端的超时值选项?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我使用Socket.IO0.9.16建立连接: io.connect(url) 但是,当服务器死机时,需要2分钟超时才能检测到服务器的错误 我已经尝试通过设置以下各项将超时时间减少到5秒: io.connect(url, {'timeout': 5000, 'connect_timeout': 5000}) 但是没有成功。。。我该怎么做?我想是连接超时了 io.connect(url, {'timeout':5000, 'connect timeout': 5000}) 这里的挑战是,存在
io.connect(url)
但是,当服务器死机时,需要2分钟超时才能检测到服务器的错误
我已经尝试通过设置以下各项将超时时间减少到5秒:
io.connect(url, {'timeout': 5000, 'connect_timeout': 5000})
但是没有成功。。。我该怎么做?我想是连接超时了
io.connect(url, {'timeout':5000, 'connect timeout': 5000})
这里的挑战是,存在一系列相互交互的不同设置和一些重试逻辑,这些设置都会导致socket.io超时,而不是您通常期望的超时。我应该补充一点,我熟悉socket.io1.0+,而不是0.9,尽管这可能适用于两者 让我们回顾一下socket.io连接是如何工作的
超时值
connect\u错误
,如果您使用socket.on('connect\u error',function(){…})在套接字上注册该消息代码>,您将看到connect\u error
事件
connect\u错误
不是超时。因此,如果连接很快失败(通常在服务器刚刚关闭时会发生这种情况),那么您将永远不会得到常规超时,并且传递给io({timeout:5000})
的超时参数实际上不会生效。只有当与服务器的连接需要很长时间时(例如,服务器过于繁忙或服务器接受TCP连接,但响应速度非常慢),才会生效。当服务器刚刚关闭或无法访问时,通常不会发生这种情况connect\u错误后,它将此socket.io连接标记为重试
重新连接延迟
选项是公式的一部分,但在查看代码时,还有一种退避算法,它会延长重试次数越多的重试间隔时间。所以,可以说,有一种算法在重试之前计算给定的延迟,每次重试都会有所不同重新连接尝试次数
,该选项指定重新连接尝试的最大次数。如果不传递,则默认值为无穷大。但是,如果您通过10
,那么它将在连续10次连接失败后放弃重新连接尝试
,那么在多次不成功的连接尝试之后,您将在套接字上获得一个重新连接失败
事件,它将放弃timeout
选项仅适用于一次重新连接尝试,而不适用于它一直尝试连接的总时间李>
在我一直在试验的示例测试页面中,我能够实现自己的传统连接超时,如下所示:
var socket = io(...);
// set connect timer to 5 seconds
socket._connectTimer = setTimeout(function() {
socket.close();
}, 5000);
socket.on('connect', function() {
// socket connected successfully, clear the timer
clearTimeout(socket._connectTimer);
});
这将为成功连接等待最长5秒,而不管连接尝试需要多长时间或在这段时间内发生了多少次重新连接尝试。5秒钟后,如果连接不成功,则会关闭套接字
在我的测试应用程序中,我可以看到socket.io愉快地一次又一次地重试连接,直到5秒后,我的计时器启动,我收到
“超时”的通知,我关闭了套接字,它不再尝试重试。我已经检查了它。它仍然无法更改默认超时值是的,谢谢您的回答。我完全同意你的意见。现在,我对这个问题有另一个解决方案:创建超时来检查socket.socket.connected值。@Binh-因为看起来你是StackOverflow的新手,你知道如果你的问题得到了回答,你可以通过勾选答案左边的绿色复选标记来向社区表明这一点吗。这将为您和提供答案的人赢得一些声誉积分,从而在网站上获得更多特权。