Javascript 通过套接字检测internet断开连接
目前,我使用的是具有TCP套接字连接的Javascript 通过套接字检测internet断开连接,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,目前,我使用的是具有TCP套接字连接的node.js服务器(使用socket.io),通过浏览器显示实时数据 考虑一个场景,我已经登录到我的应用程序,所有实时数据都通过web浏览器显示。现在网络突然断开了。此时,我想在客户端套接字发出断开连接事件时显示一条消息,表示“过期” socket.on('disconnect', function () { console.log("Disconnected from the server"); alert
node.js
服务器(使用socket.io
),通过浏览器显示实时数据
考虑一个场景,我已经登录到我的应用程序,所有实时数据都通过web浏览器显示。现在网络突然断开了。此时,我想在客户端套接字发出断开连接事件时显示一条消息,表示“过期”
socket.on('disconnect', function () {
console.log("Disconnected from the server");
alert("disconnect");
});
现在我的问题是:上述disconnect
事件在60秒后发出;在两者之间,当用户尝试更新时,它将不起作用,这将给我们留下坏印象
如何克服这种情况,以及如何在网络断开连接时突然发出
断开连接
事件?您必须了解心跳间隔
和心跳超时
。更早的时间是服务器每25秒发出一次心跳(默认情况下)。稍后是服务器将特定客户端保留在内存中的超时时间。如果客户端在<代码>心跳超时(默认为60秒)内接收到心跳,它会告诉服务器我还活着。若客户端在此超时时间内未接收到来自服务器的心跳信号,则服务器会清除该客户端的内存,并在客户端自动触发disconnect
事件。此超时在客户端连接到服务器时设置。因此,您可以在Node.js服务器中设置以下属性:
var socket = require('socket.io').listen(80,{
'heartbeat interval': 5,
'heartbeat timeout' : 10
});
现在服务器将每5秒发出一次心跳信号,若客户端在10秒内并没有收到心跳信号,断开连接事件将被触发。但请记住,心跳间隔应该小于心跳超时。希望这能奏效 您必须了解
心跳间隔
和心跳超时
。更早的时间是服务器每25秒发出一次心跳(默认情况下)。稍后是服务器将特定客户端保留在内存中的超时时间。如果客户端在<代码>心跳超时(默认为60秒)内接收到心跳,它会告诉服务器我还活着。若客户端在此超时时间内未接收到来自服务器的心跳信号,则服务器会清除该客户端的内存,并在客户端自动触发disconnect
事件。此超时在客户端连接到服务器时设置。因此,您可以在Node.js服务器中设置以下属性:
var socket = require('socket.io').listen(80,{
'heartbeat interval': 5,
'heartbeat timeout' : 10
});
现在服务器将每5秒发出一次心跳信号,若客户端在10秒内并没有收到心跳信号,断开连接事件将被触发。但请记住,心跳间隔应该小于心跳超时。希望这能奏效 这是我的解决方案
var io = require('socket.io')
.listen(server, {'pingTimeout':4000, 'pingInterval':2000});
这是我的解决方案
var io = require('socket.io')
.listen(server, {'pingTimeout':4000, 'pingInterval':2000});
一般来说,这是不可能的。当另一个国家的某个路由器崩溃时,你的应用程序如何“突然”得到通知?网络/协议将尝试重新路由您的数据,这需要时间,这是可能的。当我关闭/刷新浏览器时,它已触发“断开连接”事件;而当我尝试断开网络电缆时,它会在60秒后触发相同的断开事件。所以我的问题是延迟,这是由于浏览器/节点和socket.io之间的心跳脉冲造成的,下面的答案中对此进行了明确的解释。希望你明白我的意思:)总的来说,这是不可能的。当另一个国家的某个路由器崩溃时,你的应用程序如何“突然”得到通知?网络/协议将尝试重新路由您的数据,这需要时间,这是可能的。当我关闭/刷新浏览器时,它已触发“断开连接”事件;而当我尝试断开网络电缆时,它会在60秒后触发相同的断开事件。所以我的问题是延迟,这是由于浏览器/节点和socket.io之间的心跳脉冲造成的,这在下面的答案中有清楚的解释。希望你明白我的意思:)1000+谢谢你的解释:)在我的应用程序中,缩短心跳间隔对任何部分都有负面影响吗?是的,你可以这么说,因为在这种情况下,服务器会更忙,但这取决于您的硬件配置。1000+感谢您的解释:)在这里,缩短心跳间隔对我的应用程序的任何部分都有不利影响吗?是的,您可以这么说,因为在这种情况下,服务器会更忙,但这取决于您的硬件配置。