目前我正在使用具有TCP套接字连接的node.js
服务器(使用socket.io
),我正在通过浏览器显示实时数据。
考虑一个场景,我已登录到我的应用程序,所有实时都通过Web浏览器显示。现在,网络突然断开连接。当我在客户端套接字发出 disconnect
事件时,我想显示一条消息“Expired”。
socket.on('disconnect', function () {
console.log("Disconnected from the server");
alert("disconnect");
});
现在我的问题:上述disconnect
事件在60秒后发出;当用户尝试更新时,它将无法工作,这将给我们留下不好的印象。
如何克服这种情况以及如何在网络断开连接时突然发出disconnect
事件?
答案 0 :(得分:3)
您必须了解heartbeat interval
和heartbeat 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});