我希望在套接字关闭时运行一些代码,但仅当用户没有重新加载页面时...
我有类似
的东西socket.on("close", function() {
//do something here
});
问题是此函数在重新加载事件期间也会运行...我可以以某种方式暂停它以便稍后运行时使用该值。我尝试在回调中使用set timeout但无法再从回调中访问套接字对象。
如果在不久之后重新获得套接字连接,阻止函数运行的最佳方法是什么?
答案 0 :(得分:1)
我的想法的主要概念是,你永远不会知道用户正在重新加载或断开连接并且永远不会回来1天左右,有办法检测到浏览器正在离开网站,但是无法知道(在服务器端),它将转到相同的地址,或不同的..
相反,如果任何客户端断开连接,当然断开事件将被触发到该套接字的socket.io服务器,因此考虑到这一点你可以将会话变量设置为false,你可以说播放器是“断开连接”所以当该会话的客户端“重新连接”又称重新加载时,socket.io将触发“连接”事件,但是读取会话变量,您可以说客户端先前已断开连接,然后再次连接。时间戳可能适用于此,因此15分钟后重新连接将需要加载一些额外的数据等。
所以你可以尝试使用session(假设你使用express或者其他东西)
sockets.on("connection",function(socket){
if(session.isAReload){
// this is a reconnection
}
socket.set("isAReload",session.isAReload /*defaults to false*/);
});
sockets.on('close',function(){
socket.get('isAReload',function(err,isAReload){
if(isAReload){
// closed after reconnecting
}else{
/*
just closed connection, so next time it will be a "reload" or reconnection
a timer of lets say 30s could run to ensure that the client is reloading
*/
session.isAReload=true;
}
});
})