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操作,当计数器的

计数超过设置的阈值时,意味着当前的心跳结束,长链接失效。

posted @ 2017-06-21 10:19  齐祖  阅读(698)  评论(0编辑  收藏  举报