综述:
心跳包是在客户端和服务器端之间定时通知对方自己状态的一个自定义信息,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。心跳包在长连接的保活和断线处理方面起着相当重要的作用。
1、什么是心跳包
心跳包是在客户端和服务器端之间定时通知对方自己状态的一个自定义信息,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。心跳包主要用于长连接的保活和断线处理,包的内容没有什么特别规定。
发包方一般是客户端,不过也可以让服务器端可以定时发心跳包到客户端。一般出于效率的考虑,是由客户端主动向服务器端发包。服务器端收到客户端发出的心跳包后,也需要回复一个固定信息。
2、为什么要使用心跳机制
在长连接中,可能会出现服务器端与客户端很长一段时间都没有数据往来,但两者的连接需要一直保持的情况。如果客户端因出现故障而断开,对于服务器端而言难以发现,且有的节点会自动把一定时间之内没有数据交互的连接中断。服务器端不能有效的判断客户端是否在线,无法区分客户端是长时间在空闲,还是已经掉线的情况。在这个时候,就可以使用心跳机制以维持长连接。
通过接收到的心跳包,服务器端就能知道当前客户端还处于“活着”的状态。否则,如果隔一定时间未收到这样的包,则服务器认为客户端已经断开,进行相应的客户端断开逻辑处理。
3、Nacos的心跳机制
目前金鹰系统所使用的微服务注册中心为Nacos,微服务与Nacos之间也使用了心跳机制。
在微服务与Nacos建立连接时,会发送心跳包。Nacos会将微服务发送过来的相关信息和本次的心跳时间记录下来。在微服务注册启动后,每隔5秒会由微服务内置的 Nacos 客户端主动向 Nacos 服务器发起心跳包。心跳包会包含当前服务实例的名称、IP、端口、集群名、权重等信息。
Nacos的naming 模块在收到心跳包后,首先会检查Nacos 是否存在该服务实例。如果不存在就按新服务的业务进行注册,如果存在,则记录本次心跳包发送时间,并标记当前这个服务为健康状态,naming 模块返回心跳的时间间隔。
如果一个服务连续3次心跳没有和Nacos进行信息的交互,就会被标记为不健康状态。而当服务连续6次心跳没有和Nacos进行信息的交互,Nacos就会通过心跳检测将这个服务从注册列表中移除。
注册到Nacos的微服务项目或模块都会遵循这个心跳机制,目的是让每个服务与Nacos保持沟通和交换信息。
本文内容为原创,转载请注明出处!
,