通过套接字检测互联网断开连接

时间:2014-03-06 07:18:53

标签: javascript node.js sockets socket.io

目前我正在使用具有TCP套接字连接的node.js服务器(使用socket.io),我正在通过浏览器显示实时数据。

考虑一个场景,我已登录到我的应用程序,所有实时都通过Web浏览器显示。现在,网络突然断开连接。当我在客户端套接字发出 disconnect 事件时,我想显示一条消息“Expired”。

socket.on('disconnect', function () {
            console.log("Disconnected from the server");
            alert("disconnect");
        });

现在我的问题:上述disconnect事件在60秒后发出;当用户尝试更新时,它将无法工作,这将给我们留下不好的印象。

如何克服这种情况以及如何在网络断开连接时突然发出disconnect事件?

2 个答案:

答案 0 :(得分:3)

您必须了解heartbeat intervalheartbeat timeout。早期服务器每25秒(默认情况下)发出心跳的时间。以后是服务器将特定客户端保留在内存中的超时。如果客户端在heartbeat timeout(默认为60秒)内收到心跳,它会告诉服务器我还活着。如果客户端在此超时时间内没有从服务器收到心跳,则服务器会刷新该客户端的内存,并在客户端自动触发disconnect事件。客户端连接到服务器时设置此超时。因此,您可以在Node.js服务器中设置这些属性,如下所示:

var socket = require('socket.io').listen(80,{
  'heartbeat interval': 5,
  'heartbeat timeout' : 10
});

现在服务器将每5秒发出一次心跳,如果客户端在10秒内没有收到心跳,则会触发断开连接事件。但请记住,心跳间隔应小于心跳超时。希望这会奏效!

答案 1 :(得分:0)

这是我的解决方案

var io = require('socket.io')
  .listen(server, {'pingTimeout':4000, 'pingInterval':2000});