【发布时间】:2013-08-18 08:44:14
【问题描述】:
我想在用户闲置 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 已经执行,因为我看到了断开连接的模式)。
我做错了什么?
【问题讨论】:
-
您好,我用您的代码编写了一个小应用程序,它按预期工作。除非你能多分享一点(或者你想分享我自己的 sn-p),否则我认为我们无法找出错误所在。
-
如果将 if(!forcedc){ 更改为 if(forcedc === false){*
-
这对我来说按预期工作。这是您正在测试的确切代码吗?
-
问题是modal出现后页面自动刷新。