概述
1、使用心跳机制的原因
在凌晨等业务低谷期,如果发生网络闪断、连接被Hnag住等网络问题时,由于没有业务消息,应用进程很难发现。等到了白天业务高峰期时,会发生大量的网络通信失败,严重的话还会导致一段时间进程内无法处理业务消息。为了解决这个问题,在网络空闲时采用心跳机制来检测链路的互通性,一旦发现网络故障,立即关闭链路,主动重连。
2、设计思路
(1)当网络处于空闲状态持续时间达到T(连续周期T没有读写消息)时,客户端只懂发送Ping心跳消息给服务端。
(2)如果在下一个周期T到来时客户端没有收到对方发送的Pong心跳应答消息或者读取到服务端发送的其他业务消息,则心跳失败计数器加1.
(3)每当客户端接收到服务的业务消息或者Pong应答消息时,将心跳失败计数器清零,连续N次没有接收到服务端的Pong消息或者业务消息,则关闭链路,间隔INTERVAL时间后发起重连操作。
(4)服务端网络空闲状态持续时间达到T后,服务端将心跳失败计数器加1;只要接收到客户端发送的Ping消息或者其他业务消息,计数器清零。
(5)服务端连续N次没有接收到客户端的Ping消息或者其他业务消息,则关闭链路,释放资源,等待客户端重连。
3、小结
通过Ping-Pong双向心跳机制,可以保证无论通信哪一方出现网络故障,都能被及时地检测出来,为了防止由于对方短时间内繁忙没有及时返回应答造成的误判,只有连续N次心跳检测都失败才认定链路已经损害,需要关闭链路并重建链路。
当读或者写心跳消息发生I/O异常的时候,说明线路已经中断,此时需要立即关闭链路,如果时客户端,需要重新发起连接。如果是服务端,需要清空缓存的半包信息,等待客户端重连。
内容来源:
《Netty权威指南》.李林锋
最后
以上就是苹果水杯为你收集整理的Netty可靠性设计之Netty心跳机制1、使用心跳机制的原因2、设计思路3、小结的全部内容,希望文章能够帮你解决Netty可靠性设计之Netty心跳机制1、使用心跳机制的原因2、设计思路3、小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复