如何在自动重新连接超时后重新连接socket.io客户端

How to reconnect socket.io client on activity after auto-reconnect times out?

本文关键字:重新连接 socket io 客户端 超时      更新时间:2024-03-09

笔记本电脑入睡是很常见的。这会导致socket.io客户端断开连接。当用户返回到web应用程序时,socket.io客户端不会尝试重新连接(可能达到了重新连接限制?)。如果用户执行了一些操作,我如何告诉套接字重新连接?

例如,我希望emit函数检查连接是否处于活动状态,如果不是,则尝试重新连接。

注意:我只需要客户端JS代码,不使用node.JS.

在版本0.9中,您可以尝试将connect-options对象设置为一些激进的设置:

  var main = io.connect('/', {
    'reconnection delay': 100, // defaults to 500
    'reconnection limit': 100, // defaults to Infinity
    'max reconnection attempts': Infinity // defaults to 10
  });

请注意,max reconnection attemps并不意味着io客户端将在10次尝试失败后停止重新连接服务器。如果它能够重新连接到服务器10次,但第11次断开连接,它将停止重新连接。

请参阅Socket.IO配置

Socket实例有一个内部的"Socket"属性,该属性又有一个可以调用的connect()方法。它通常在实例化对象时自动调用(由"自动连接"选项控制)。内部套接字还有一个布尔"connected"属性,如果你不确定状态是什么,你可以检查它

sio = io.connect();
//... time passes ...
if (! sio.socket.connected) {
  sio.connect();
}

connect()方法进行检查以确保套接字没有处于尝试连接的中间,尽管出于某种原因,它没有检查套接字是否已经连接。不确定如果连接()一个已经连接的套接字会发生什么。。。

客户端库的源代码相当清晰,注释也很好,这很好,因为github上的README没有提供太多帮助。在进行开发时,使用该库的未缩小版本非常方便,这样您就可以深入了解源代码。

您可以尝试使用connect.failed事件:

socket.on('connect_failed', function () {
   /* Insert code to reestablish connection. */
});

您可以运行setInterval来检查连接状态,如

s.connect()
if (! s.socket.connected) {
   s.connect();