1

我想在 aa 套接字关闭时运行一些代码,但前提是用户没有重新加载页面......

我有类似的东西

socket.on("close", function() {
//do something here
});

问题是这个函数也在重新加载事件期间运行......我可以以某种方式暂停它以在稍后的时间使用该值运行。我尝试在回调中使用设置超时,但无法再从回调中访问套接字对象。

如果不久之后重新恢复套接字连接,那么防止函数运行的最佳方法是什么?

4

1 回答 1

1

我的想法的主要概念是,您永远无法知道用户正在重新加载或断开连接并且永远不会回来 1 天左右,有办法检测浏览器正在离开网站,但无法知道(在服务器侧)它会去相同的地址,或不同的..

相反,如果任何客户端断开连接,当然断开事件将被触发到该套接字的 socket.io 服务器,因此考虑到这一点,您可以将会话变量设置为 false,您可以说播放器“断开连接”,所以当客户端在该会话“重新连接”又名重新加载时,socket.io 将触发“连接”事件,但读取会话变量,您可以说客户端先前已断开连接,然后再次连接。时间戳可能适用于此,因此 15 分钟后重新连接将不得不加载一些额外的数据等。

所以你可以在会话中尝试这个(假设你使用 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; 
  }
 });
})
于 2013-07-13T07:25:59.320 回答