Javascript socket.io知道何时达到最大重新连接尝试限制

Javascript socket.io知道何时达到最大重新连接尝试限制,javascript,node.js,sockets,websocket,socket.io,Javascript,Node.js,Sockets,Websocket,Socket.io,我有一个节点套接字服务器和一个客户端连接 如果套接字服务器出现短期故障,客户端可以在我不做任何事情的情况下重新建立连接。但是,如果客户端宕机很长时间,则尝试从客户端重新连接之间的延迟太长(每次重新连接失败后,重新连接尝试之间的延迟都会变长) 为了解决这个问题,我想将“最大重新连接尝试次数”设置为一个较小的数字,如果它们已用尽,我想运行自己的轮询代码 我的问题是,如何知道客户端何时达到最大重新连接尝试次数限制 socket.on('disconnect')即使在套接字尝试重新建立连接时也会被调用,

我有一个节点套接字服务器和一个客户端连接

如果套接字服务器出现短期故障,客户端可以在我不做任何事情的情况下重新建立连接。但是,如果客户端宕机很长时间,则尝试从客户端重新连接之间的延迟太长(每次重新连接失败后,重新连接尝试之间的延迟都会变长)

为了解决这个问题,我想将“最大重新连接尝试次数”设置为一个较小的数字,如果它们已用尽,我想运行自己的轮询代码

我的问题是,如何知道客户端何时达到最大重新连接尝试次数限制

socket.on('disconnect')
即使在套接字尝试重新建立连接时也会被调用,事实上可能会成功,尝试调用其他代码的位置也不正确

以下是我的客户代码中的一个小片段:

function start_socket(){
        console.log("socket trying to connect");
        socket = io.connect('http://someip/', { 'force new connection': true , 'max reconnection attempts' : 0});
        console.log("...here");
        socket.on('connect', function() {
                console.log('connected to server');
                set_loggedin_status('true');
        });
        socket.on('something', function(link) {
          console.log("something: " + something);
          openTabWithURL(something);
        });
        socket.on('disconnect', function() {
                console.log('disconnected from server');
                set_loggedin_status('false');
                close_socket();
        });
        socket.on('error',function(){
                console.log('socket error');
        });
}

function do_my_own_polling(){
  //some code here.
}

我认为您试图以一种错误的方式获得结果:如果我理解正确,那么您需要始终使用固定的轮询延迟来查找服务器

您可以配置socket.io来完成此操作,而不是在尝试重新连接的次数达到最大值时启动自己的轮询机制(这需要额外的“元”源代码)。特别是,您可以尝试使用以下选项(从):

  • 重新连接限制
    :允许您设置每次轮询/重新连接尝试之间的最大时间延迟。例如,将此设置为3秒,socket.io将在500毫秒后进行第一次轮询(这是重新连接延迟的默认值),第二次轮询在1s后进行,第三次轮询在2s后进行,但第四次轮询将在3s后进行,而不是在4后。以下尝试的时间间隔为3秒
  • 最大重新连接尝试次数
    :设置socket.io将进行的重新连接尝试次数:如果希望socket.io永远尝试,请将其设置为“无限”
因此,以下措施将起作用:

socket = io.connect('http://someip/', {'reconnection limit' : 1000, 'max reconnection attempts' : 'Infinity'});

谢谢你的链接。我想实现自己的轮询的原因是socket.io在每次尝试重新连接时都使用指数退避(请参阅您提供的链接中的
重新连接延迟
)。但是,查看您提供的链接,会告诉我当达到最大重新连接尝试次数限制时,将触发一个
重新连接\u failed
事件。这就是我的答案。我想一个相关的问题是,是否有任何方法可以改变用于增加重新连接尝试之间的延迟的指数退避算法。“socket.io在每次重新连接尝试时使用指数退避”是,这就是
重新连接限制
查找它的地方实用程序:将延迟阻止到您指定的量,socket.io一旦达到该限制,将以固定的间隔保持轮询。为了避免失败,您可以尝试将
最大重新连接尝试次数
设置为无穷大,正如我在回答中所写的,显然我误解了您的答案,我仍然不清楚。好的。我想我明白你的意思。但是你的答案写得不清楚。尼科尼克:如果你编辑你的答案,这样答案就可以清楚地理解,我会接受的。