笔记本电脑进入睡眠状态很常见。这会导致socket.io客户端断开连接。当用户返回到web应用程序时,socket.io客户端不会尝试重新连接(可能达到重新连接限制?)。如果用户执行某些操作,如何告诉套接字重新连接?如何在自动重新连接超时后重新连接socket.io客户端上的活动?
例如,我想用emit
函数检查连接是否处于活动状态,如果不是,则尝试重新连接。
注:我只需要客户端的JS代码,我不使用node.js.
笔记本电脑进入睡眠状态很常见。这会导致socket.io客户端断开连接。当用户返回到web应用程序时,socket.io客户端不会尝试重新连接(可能达到重新连接限制?)。如果用户执行某些操作,如何告诉套接字重新连接?如何在自动重新连接超时后重新连接socket.io客户端上的活动?
例如,我想用emit
函数检查连接是否处于活动状态,如果不是,则尝试重新连接。
注:我只需要客户端的JS代码,我不使用node.js.
你可以尝试使用connect.failed
事件:
socket.on('connect_failed', function() {
/* Insert code to reestablish connection. */
});
的Socket实例有一个内部“插座”属性,这反过来又连接,您可以调用()方法。通常在实例化对象(由“自动连接”选项控制)时自动调用。内部套接字也有一个布尔“连接”属性,你可以检查你是否不确定状态是什么。像这样:
sio = io.connect();
//... time passes ...
if (! sio.socket.connected) {
sio.connect();
}
的connect()方法进行检查,以确保插座是不是在尝试连接,但由于某种原因,它不检查,看看它是否已经连接中间。不知道如果连接()已连接的套接字会发生什么......
客户端库的源代码相当清晰且评论良好,这很好,因为the README on github没有提供很多帮助。在开发过程中使用库的未缩小版本可以很方便,因此您可以深入了解源代码。
谢谢德克。我会在什么地方告诉socket.io重新连接,如果客户端尝试向服务器发送内容时没有连接? – 2012-08-02 07:11:06
取决于代码的结构。你可以在一个包含emit()的包装器中检查连接状态。你可以有一个on(“disconnect”)函数弹出一个对话框,询问用户是否想重新连接。您还必须试验一下,当您关闭笔记本电脑上的盖子时会发生什么。不知道socket.io代码将如何感知... – 2012-08-03 01:47:44
在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次失去连接,它将停止重新连接。
你可以有一个的setInterval运行的检查一样
s.connect()
if (! s.socket.connected) {
s.connect();
连接的状态我试过了。问题是,在笔记本电脑被唤醒或丢失无线重新连接后,connect_failed未被触发。这就是为什么我想要重新连接用户活动,但我不知道如何去做。 – 2012-07-26 14:00:30
+1,因为此方法在笔记本电脑被唤醒时调用。但是我仍然需要一种方法在自动重新连接超时并且socket.io放弃之后尝试重新连接,例如当没有网络连接时。 – 2012-07-27 02:30:31