一般存在于服务器集群、多机并行时用的。
是服务器组各个机器之间传递信息用的。
比如故障转移集群服务器的心跳。集群网络是对外正常工作通讯的,心跳网络就是A\B机之间传递信息,相互验证对方是否还在正常运行用的。比如平时是A机在运行服务,A、B机之间会每隔一段时间通过心跳网询问对方是否还正常,如果A服务器宕机了,B得不到回应,就行把集群资源拿过来继续运行服务。
的检测,清除死连接,即使在没有数据来往的时候,TCP也就可以(在启动TCP这个功能的前提下)自动发包检测是否连接正常,这个不需要我们处理。服务端设计心跳包的目的:
探知对端应用是否存活,服务端客户端都可以发心跳包,一般都是客户端发送心跳包,服务端用于判断客户端是否在线,从而对服务端内存缓存数据进行清理(玩家下线等);问题在于,通过TCP四次握手断开的设定,我们也是可以通过Socket的read方法来判断TCP连接是否断开,从而做出相应的清理内存动作,那么为什么我们还需要使用客户端发送心跳包来判断呢?
第一种判断客户端是否在线策略:
直接监控TCP传输协议的返回值,通过返回值处理应用层的存活判断
比如在C++当中
使用poll的IO复用方法时:
if(fds[i].revents &POLLERR)
if(fds[i].events &POLLDHUP)
通过上述判断可以探知TCP连接的正确性从而在服务器也关闭对应的连接
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)