我在我的聊天应用程序中使用带有socket.io的NodeJS。当客户端刷新/关闭窗口或导航到不同的URL时,我需要客户端发出"断开"事件到NodeJS服务器。所有的工作都很好用的IE8 / 9的删除。当刷新发生时#34;断开"事件未发送到服务器,因此服务器不知道此特定客户端不再连接。
我设法使用:
window.onbeforeunload = function(e) {
socket.disconnect();
};
并负责点击后退/前进按钮,然后通知服务器客户端断开连接。刷新页面或关闭选项卡但不会断开与服务器的连接。似乎刷新页面太快,因此socket.disconnect()
没有机会执行。好像我像下面那样警告,客户端暂停警报窗口,服务器收到断开连接消息。
window.onbeforeunload = function(e) {
socket.disconnect();
alert("hey watchout!");
};
现在,有没有办法在刷新页面时让IE8 / 9向NodeJS发送断开连接事件?
答案 0 :(得分:0)
您可以来回发送信息并查找上次回复的时间,将其与现在进行比较,如果差异大于数字,请断开客户端连接,然后在客户端再次开始发送时重新连接。
您可以使用以下内容:
在客户端:
socket.on('ping',function(){socket.emit('pong',(new Date()).getTime());});
在服务器上:
socketReferences = new Array();
io.on('connection',function(socket){
socketReferences.push(socket);
socket.on('pong',function(data){
if(new Date()).getTime()>5000){
// disconnect code here
}
});
});
setInterval(function(){
for(socket in socketReferences)
socketReferences[socket].emit('ping','');
},700);