网络编程中的心跳机制

心跳机制

在一些C/S结构、分布式程序中可以使用心跳来判断节点的存活状态。


应用中的使用

1. 从节点主动向主节点发送ping

  主节点回应pong,这也是一般的使用情况,如hadoop、spark那些系统。
每个从节点上启动一个线程专门发送ping,采用定时器来定时检查是否应该发送下一次的ping以及上一次ping是否超时等。主节点上需要不断更新收到的来自从节点的ping的时间,用来判断是否超时。如果有N个从节点,1个主节点,则需要N+1个线程来发送信息,另外还要考虑如何接收。

2. 主节点主动发送心跳

  主节点持有对从节点的连接的引用,可以使用两个队列来保存发送的时间等信息:

  1. 已发送ping的队列

  2. 待发送ping的队列

    每次在收到pong后将代表从节点的元素从队列1中移出,加入到队列2中。

    线程数也并不比上面的方式少。

3. 超时

有时候由于网络阻塞等原因造成心跳超时,这种情况需要考虑设置两个超时时间,一个较短,一个较长。当较长的时间内仍无响应,则可以判定为长久连接已断开,再进行重新连接或直接删除节点连接信息。

posted @ 2016-04-25 23:38  康行天下  阅读(2406)  评论(0编辑  收藏  举报