[英]Check for Client Reconnection Before Disconnect Triggers
因此,我试图实时显示我的在线播放器,到目前为止,除了一个问题之外,它的运行情况非常好。 当我的应用监听断开连接时,页面刷新似乎触发了此功能,并且该播放器已注销。
app.io.route("disconnect", function(req,res) {
db.query("UPDATE player_data SET online=0 WHERE id="+mysql.escape(req.session.user));
req.io.broadcast("event", {msg:req.session.username+" has logged out!"});
app.io.broadcast("reloadXY");
req.session.destroy();
});
为什么页面刷新会触发此功能? (我知道这是此功能,因为玩家注销的唯一其他方法是通过注销链接)如何让它忽略页面刷新,而只捕获断开连接(如关闭浏览器)?
编辑:如何为重新连接事件“ ping”,以便检查页面是否已重新加载还是关闭? 重新加载将立即进行重新连接,因此我只需要检查是否存在所述重新连接。 我就是不知道!
感谢Zirak(和Tim Cooper,尽管当时我不知道他的意思),我才得以解决这个问题。 他建议我在会话中存储一个断开连接超时,并且当存在重新连接(由于页面重新加载而很快)时,只需清除超时,然后自动注销播放器即可。
app.io.route("stopDisconnection", function(req) {
if (req.session) {
clearTimeout(req.session.disconnection);
console.log("Timeout cleared");
}
});
app.io.route("disconnect", function(req) {
req.session.disconnection = setTimeout(function() {
console.log("User timed out!");
db.query("UPDATE player_data SET online=0 WHERE id="+mysql.escape(req.session.user));
app.io.broadcast("event", {msg:req.session.username+" has logged out!"});
app.io.broadcast("reloadXY");
req.session.destroy();
},5000);
});
只需在index.html上调用io.emit("stopDisconnection")
这样,您就可以成功触发断开连接功能,而不必担心页面刷新也会触发事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.