这是近期参与的一个云推送项目调研的一点东西,贴上来做个备份:)
如需转载,请注明出处:)
综述
所谓的心跳机制,就是周期性的给服务器发送一个数据包,避免该连接上长期没有数据传送,被传输网络中的防火墙或者NAT等设备中断,就是当一个TCP会话的两个连续报文到达防火墙的时间间隔大于该会话的保持时间时,为了保证网络的安全性,防火墙会从会话表中删除相应的会话信息,后续报文到达防火墙后,防火墙根据自身的转发机制,丢弃该报文,导致通讯中断,必须重新建立连接。
为了保持这个长连接不被防火墙删除,需要在没有数据传送时,通过周期的发送心跳信息来保持会话连续。即心跳的目的:
- 保活链接。
- 检测设备网络状态,保持通讯顺畅。
心跳机制对于客户端来说,是需要付出一些代价的,比如:
- 网络流量。
- 电量。
要减少损耗,一方面要减少每次心跳发送的数据量,更重要的是要减少发送心跳包的次数,因此心跳周期的设置成为关键要素:
- 如果心跳周期过短,那么会频繁的发送心跳,会造成待机时间减少,增加网络流量。
- 如果心跳周期设置过长,那么如果网络出现问题的时候就无法及时的检测的异常并清理资源,发起重连,导致推送消息的延迟,更关键的是过长的心跳会导致防火墙的强制关闭。
所以需要进行权衡,找到一个最合适的心跳时间,但由于网络情况的复杂,我们无法预先知道这个最合适的时间,所以需要找到一种自适应(adaptive)的智能算法来进行猜想。
- 算法需要考虑到以下场景:
- 当前的通讯网络拥塞造成的心跳超时或者服务器挂掉。
- 用户切换网络或者防火墙会话保持时间改变。
初步设计
首先需要确定心跳间隔的最小值min和最大值max,单位为秒,这是我们经过算法得到的心跳间隔不可以超过这个范围。
max和min的确定需要经过实际的统计和测试才能得出,可先初步指定,后续酌情设置,最终的心跳时间会落在这个范围之内。
算法在客户端上实现,因为心跳消息是由客户端发起的,只有客户端能检测到心跳消息的发送失败。
算法流程简述如下:
1)客户端请求goload接口,得到上述提到的min和max,还有T和N和M,后续会介绍。
客户端还需维护3个变量,分别为:当前的心跳间隔cur,min'和max',后续会介绍到。
初始设置如下:
- cur = (min + max) / 2
- min' = min
- max' = max
2)连接tcp server,第一次发送心跳后间隔cur时间后发送第二次心跳。
3)如果第二次发送后服务端响应成功,那么代表网络顺畅且当前的时间间隔没有被NAT杀掉,那么更新数据:
- min' = cur
- cur = (max' + cur) / 2
4)以cur作为心跳间隔继续发送心跳。
5)如果发送心跳没有得到服务端响应(客户端应会设置一个read超时时间,需要酌情设置),则代表出现网络问题,可能是网络拥塞出现了读超时,那么客户端可以重新试图发送心跳N次,间隔为M秒,N和M酌情设置,如果发现还是超时,则尝试重连;也可能是当前的心跳间隔比NAT会话时间大,或者是设备的网络不可用,那么需要进行重连,重连前需要更新下列数据并回到第2个步骤:
- max' = cur
- cur = (cur + min') / 2
6)在经过了若干次计算之后,会得到一个最优的心跳间隔,之后就不需要进行计算了,条件如下:
- cur - min < T or max - cur < T
- T为一个阈值,第1点有提到,可酌情设置。
结论
使用智能心跳策略有利于节省电量和流量,百度也支持了这种策略,但有以下一些小问题:
-
在探测的阶段的重连次数会多一些。
-
增大客户端的逻辑处理。
-
在用户网络情况多变的场景也许不稳定。
相关推荐
心跳包技术在核电仪控网络安全性设计中的应用研究 心跳包技术是一种重要的手段来提高核电仪控网络的安全性。通过心跳包数据,可以判断网络节点之间的连接状况,从而提高总线网络通信的安全性。本研究设计了一种改进...
在Windows 32位环境下,心跳监控服务器和客户端的设计是一个重要的网络通信技术,它主要用于确保网络连接的稳定性和及时检测连接中断。心跳监控系统通过周期性地发送数据包(心跳包)来验证通信双方是否在线并能正常...
在Linux环境下实现双机热备用,心跳设计是关键的一环,它确保了当主服务器出现故障时,备份服务器能够快速接管服务,保证系统的连续性和稳定性。这种技术广泛应用于数据中心、Web服务器、数据库服务器等对高可用性有...
心跳计数系统的方案设计.pdf
心跳程序就是设计来执行这种功能的软件,它定时发送和接收心跳,确保通信链路的稳定性和可靠性。 心跳程序的核心功能包括定时发送心跳和处理接收到的心跳。发送心跳通常是为了验证远程端点是否在线,而接收心跳则...
综上所述,这个项目涵盖了Arduino编程、物联网技术、PCB设计以及源码开发等多个方面,是一个融合了硬件和软件的综合性智能家居健康监测解决方案。通过这样的系统,用户不仅可以实时监测自身心率,还可以利用物联网...
本文将详细解析"PLC心跳在线离线显示"这一主题,包括如何利用心跳信号来检测和判断LabVIEW与PLC的连接状态,以及处理心跳超时的情况。 **PLC心跳信号原理** PLC心跳信号是一种通信机制,它通过周期性地发送特定的...
springboot整合 netty做心跳检测 springboot整合 netty做心跳检测 springboot整合 netty做心跳检测 springboot整合 netty做心跳检测 springboot整合 netty做心跳检测 springboot整合 netty做心跳检测 springboot整合...
综上所述,主备板协商和心跳机制是构建高可用性系统的基础,它们通过智能的故障检测和快速的故障切换,确保了服务的持续性和可靠性。在实际应用中,需要综合考虑系统的需求、资源限制和安全性等因素,进行合理的架构...
本设计要解决的问题是提供一种基于STM32单片机测量心跳(心率MAX30102)和呼吸频率(声音传感器)的车用安全带预警OLED显示的方法,该预警方法包括下述步骤: 步骤一:读取心跳频率测量模块和呼吸频率测量模块采集的模拟...
在讨论基于Spring Boot的智能管道检测机器人软件设计时,需要重点关注几个关键技术点和相关知识点。本文针对智能管道检测机器人的软件系统设计,提出了以Spring Boot为框架,构建了一套完整的控制系统、数据处理系统...
心跳包的设计要素包括: 1. **定时器**:设置定时器定期发送心跳请求。这可以使用`setInterval`函数实现。 2. **超时机制**:如果在预定时间内没有收到响应,视为连接丢失,并进行重连或通知用户。 3. **错误处理**...
- 设计一个心跳包管理器类,负责心跳包的发送间隔、超时时间以及断线重连策略的设置和控制。 - 使用线程池来管理多个并发的心跳包发送和接收任务,提高系统的并行处理能力。 **异常处理** - 对于心跳包发送和接收...
系统包括一个物联网服务器(上位机)和多个客户端(下位机),模拟不同的智能家居设备如温度传感器、湿度传感器、灯光、空调、门窗磁和插卡取电。下位机负责收集设备数据并发送给服务器,而服务器接收数据后进行处理...
智能心跳机制:解决网络的不确定性
基于物联网技术的远程智能医疗数据传输系统设计,旨在利用物联网技术实现医疗健康数据的远程实时传输与管理,以提高医疗服务质量和效率,减轻医疗资源紧缺的压力。物联网技术通过引入各种传感器和通信技术,可以实现...
题目中提到了一种基于Java的心跳检测实现方案,下面将详细介绍这一方案的设计思路和核心代码。 ##### 1. 设计思路 心跳机制的核心思想是让客户端定时向服务器发送状态信息,服务器接收到这些信息后更新客户端的状态...
mina心跳包机制是Apache Mina框架中的一个关键特性,它用于维持网络连接的活跃状态,确保数据能够在客户端和服务端之间顺畅地传输。Mina是一个高度可扩展的Java网络应用框架,广泛应用于各种分布式系统和网络服务,...
作品:proteus仿真--基于单片机的脉搏心跳检测设计 使用材料:STM32F103、数码管、LCD、按键 平台:proteus 和 keil 技术实现:按键模拟人的脉搏,每按下一次按键,则相当于心跳一次,心跳的次数用数码管显示,...
2. **安装和初始化**:在每个节点上安装PowerHA软件,并进行初步的配置,如设置集群名称、节点名称、网络参数等。 3. **配置心跳**:根据网络拓扑,选择合适的心跳接口,这可能包括物理网络接口或专用的串行端口。...