Socket.io不会在IE8 / 9中向NodeJS发送断开事件

时间:2014-04-10 12:39:59

标签: node.js socket.io

我在我的聊天应用程序中使用带有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发送断开连接事件?

1 个答案:

答案 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);