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

时间:2012-07-26 10:39:04

标签: javascript socket.io

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

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

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

4 个答案:

答案 0 :(得分: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 Configuration

答案 1 :(得分:4)

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

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

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

客户端库的源代码非常清晰且评论很好,这很好,因为the README on github没有提供很多帮助。在您进行开发时使用未缩小版本的库非常方便,因此您可以深入了解源代码。

答案 2 :(得分:2)

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

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

答案 3 :(得分:-2)

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

s.connect()

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