我想在 2 小时不活动后断开用户与 socket.io 的连接,并给他们一个提示/重新连接按钮。
首先,我将自动重新连接设置为 false 和一个变量 forcec:
var socket = io.connect('https://coinchat.org:443',{secure: true, reconnect: false});
var forcedc = false;
接下来,当有人移动鼠标时,我有一个不活动的超时时间:
$("body").mousemove(function(e){
clearTimeout(dcTimeout);
dcTimeout = setTimeout(function(){
if(!forcedc){
forcedc = true;
socket.disconnect();
$("#dcmodal").modal('show');
}
}, 1000 * 60 * 60 * 2);
});
基本上,forcedc 意味着用户由于不活动而断开连接,浏览器不应刷新页面以尝试重新连接。如果forcedc为false,表示用户因网络问题断开/服务器重启,浏览器需要刷新页面重新连接。
现在,当套接字断开连接时:
socket.on("disconnect", function(data){
if(!forcedc){
setTimeout(function(){document.location.reload(true)}, 1000 + Math.random()*12750);
}
});
如果forcedc 为false,页面应该刷新。但是,即使用户由于不活动而已经“断开连接”,页面也会刷新(我知道强制c = true 已经执行,因为我看到了断开连接的模式)。
我究竟做错了什么?