HeartBeat实现机制-linux
在之前做过众多基于TCP通讯物联网项目中,通常有为了满足实时数据采集,控制命令实时响应的需求,这里常用的的手段
是保持一个基于TCP的长连接,完成通讯两端的实时数据传递。因此在应用程序中通过heartbeat监测一个长链接显得很有必要。
常用方式:
1.定周期使用指定的应用数据(自定义)传输,Client和Server端在各自接收数据时进行定时,计数
操作,达到设定的阈值时间时,意味着HeartBeat心跳停止,长链接失效。
优点: 编码简单,直接通过应用层数据的关键字来判断。
缺点:在网络拥塞和流量控制情况下,不适用。
2.keep-alive 机制
这里通过设置Socket的keep-alive属性来达成。
优点:通过协议层能够及时捕获和处理链接超时的异常。
缺点:keep-alive机制的超时时间设置,一般默认设置在系统的配置文件中,是针对套接字,而不是链接不身。会影响其他套接字
所创建的链接。
3.TCP协议栈应急机制-URGENT
优点:能够实时得传递出应急信息到对端的TCP接收端中,不受流量控制影响。
缺点:编码较为复杂,需要处理当前链接URGENT信号。
一般而言,通过URGENT,ALARM这2个信号,自定义好信号处理函数,可以实时捕获链接异常信息情况。
信号处理函数实现较为简单,通过简单的全局变量计数来达成,收到URGENT信号,URGENT信号处理函
数中计数器就清空为0。没有收到URGENT信号时,ALARM信号处理函数的计数器就加1操作,当计数器的
计数超过设置的阈值时,意味着当前的心跳结束,长链接失效。