笔记本电脑常常入睡。这会导致socket.io客户端断开连接。当用户返回到Web应用程序时,socket.io客户端不会尝试重新连接(可能已达到重新连接限制?)。如果用户执行某些操作,如何告诉套接字重新连接?
例如,我希望emit
函数检查连接是否处于活动状态,如果没有,则尝试重新连接。
注意:我只需要客户端JS代码而我不使用node.js.
答案 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次失去连接,它将停止重新连接。
答案 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();