7

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

例如,我希望该emit功能检查连接是否处于活动状态,如果没有,则尝试重新连接。

注意:我只需要客户端的 JS 代码,我没有使用 node.js。

4

4 回答 4

7

在 0.9 版中,您可以尝试将连接选项对象设置为一些激进的设置:

  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 配置

于 2013-02-18T07:28:53.067 回答
4

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

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

connect() 方法检查以确保套接字不在尝试连接的过程中,但由于某种原因它不检查它是否已经连接。不知道如果你 connect() 一个已经连接的套接字会发生什么......

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

于 2012-08-01T22:23:33.963 回答
2

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

socket.on('connect_failed', function () {
   /* Insert code to reestablish connection. */
});
于 2012-07-26T10:45:42.557 回答
-2

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

s.connect()

if (! s.socket.connected) {
   s.connect();
于 2014-09-26T16:52:41.170 回答