Javascript Socket.IO-如何更改客户端的超时值选项?

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}) 这里的挑战是,存在

我使用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})

这里的挑战是,存在一系列相互交互的不同设置和一些重试逻辑,这些设置都会导致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连接,但响应速度非常慢),才会生效。当服务器刚刚关闭或无法访问时,通常不会发生这种情况
  • 因此,在socket.io收到
    connect\u错误后,它将此socket.io连接标记为重试
  • 重试之前的延迟是基于一大堆事情。大概,
    重新连接延迟
    选项是公式的一部分,但在查看代码时,还有一种退避算法,它会延长重试次数越多的重试间隔时间。所以,可以说,有一种算法在重试之前计算给定的延迟,每次重试都会有所不同
  • 然后,在计算出的延迟之后,它尝试再次连接。这基本上再次重复从步骤1开始的过程
  • 据我所知,默认情况下,它会一直重试。有一个选项可以传递
    重新连接尝试次数
    ,该选项指定重新连接尝试的最大次数。如果不传递,则默认值为无穷大。但是,如果您通过
    10
    ,那么它将在连续10次连接失败后放弃
  • 如果指定了
    重新连接尝试
    ,那么在多次不成功的连接尝试之后,您将在套接字上获得一个
    重新连接失败
    事件,它将放弃
  • 据我所知,没有传统的超时方式,您正在寻找它连接的位置,尝试一些重试,然后在x时间后放弃。
    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的新手,你知道如果你的问题得到了回答,你可以通过勾选答案左边的绿色复选标记来向社区表明这一点吗。这将为您和提供答案的人赢得一些声誉积分,从而在网站上获得更多特权。