2012-07-26 118 views
7

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

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

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

回答

2

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

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

连接的状态我试过了。问题是,在笔记本电脑被唤醒或丢失无线重新连接后,connect_failed未被触发。这就是为什么我想要重新连接用户活动,但我不知道如何去做。 – 2012-07-26 14:00:30

+0

+1,因为此方法在笔记本电脑被唤醒时调用。但是我仍然需要一种方法在自动重新连接超时并且socket.io放弃之后尝试重新连接,例如当没有网络连接时。 – 2012-07-27 02:30:31

4

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

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

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

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

+0

谢谢德克。我会在什么地方告诉socket.io重新连接,如果客户端尝试向服务器发送内容时没有连接? – 2012-08-02 07:11:06

+0

取决于代码的结构。你可以在一个包含emit()的包装器中检查连接状态。你可以有一个on(“disconnect”)函数弹出一个对话框,询问用户是否想重新连接。您还必须试验一下,当您关闭笔记本电脑上的盖子时会发生什么。不知道socket.io代码将如何感知... – 2012-08-03 01:47:44

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

你可以有一个的setInterval运行的检查一样

s.connect() 

if (! s.socket.connected) { 
    s.connect(); 
相关问题