笔记本电脑进入睡眠状态是很常见的。这会导致 socket.io 客户端断开连接。当用户返回 Web 应用程序时,socket.io 客户端不会尝试重新连接(可能已达到重新连接限制?)。如果用户执行某些操作,我如何告诉套接字重新连接?
例如,我希望该emit
功能检查连接是否处于活动状态,如果没有,则尝试重新连接。
注意:我只需要客户端的 JS 代码,我没有使用 node.js。
笔记本电脑进入睡眠状态是很常见的。这会导致 socket.io 客户端断开连接。当用户返回 Web 应用程序时,socket.io 客户端不会尝试重新连接(可能已达到重新连接限制?)。如果用户执行某些操作,我如何告诉套接字重新连接?
例如,我希望该emit
功能检查连接是否处于活动状态,如果没有,则尝试重新连接。
注意:我只需要客户端的 JS 代码,我没有使用 node.js。
在 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 配置
Socket 实例有一个内部的 'socket' 属性,它又具有你可以调用的 connect() 方法。它通常在您实例化对象时自动调用(由“自动连接”选项控制)。内部套接字还有一个布尔“已连接”属性,如果您不确定状态是什么,您可以检查它。像这样:
sio = io.connect();
//... time passes ...
if (! sio.socket.connected) {
sio.connect();
}
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();