节点:使用套接字事件区分重新加载事件和浏览器出口

我想运行一些代码,当一个套接字closures,但只有当用户没有重新加载页面…

我有类似的东西

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

问题是,这个函数在重载事件中运行以及…我可以暂停它稍后运行的价值在稍后的时间。 我试图在callback中使用一个超时设置,但不能从callback中访问套接字对象。

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

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

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

所以你可以尝试这个会话(假设你使用快递或其他)

 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; } }); })