我想在套接字关闭时运行一些代码,但前提是用户没有重新加载页面...
我有类似的东西
socket.on("close", function() {
//do something here
});
问题是这个函数也在重新加载事件期间运行...我可以以某种方式暂停它以便稍后使用当时的值运行吗?我尝试在回调中使用设置的超时,但无法再从回调中访问套接字对象。
如果套接字连接不久后重新获得,阻止该函数运行的最佳方法是什么?
我的想法的主要概念是,你永远不会知道用户正在重新加载或断开连接,并且在 1 天左右的时间内不会再回来,有一些方法可以检测浏览器正在离开网站,但无法知道(在服务器端)它将转到相同的地址或不同的地址..
相反,如果任何客户端断开连接,当然会向该套接字的 socket.io 服务器触发断开连接事件,因此考虑到这一点,您可以将 session 变量设置为 false,您可以说玩家已“断开连接”,因此当该 session 的客户端“重新连接”(即重新加载)时,socket.io 将触发“连接”事件,但读取 session 变量您可以说客户端之前已断开连接,然后再次连接。时间戳可能适用于此,因此 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;
}
});
})
我是一名优秀的程序员,十分优秀!