
“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”
如题,服务器端在设计心跳的主要目的就是为了探测对端是否还正常在线,两端都可以发送心跳的报文,主要通过此方式去判断用户侧是否在线,若不在线则对服务器端的缓存数据进行清理,即主动对用户进行下线操作。以游戏服务端为例做举例:
当用户登录某游戏进行试玩,因为其它原因长时间挂机,没有操作,这时服务器端与客户端就会交互心跳报文,证明此用户还在线,因此会保证用户连接状态,但也可以设置对应时间段内若没有任何操作进行下线处理;
当用户登录游戏后,因为其它原因造成主机非正常关机,没有根据正常的操作步骤去下线,这时就会通过心跳报文来判断主机是否正常在线,若不在线即可直接进行下线处理。
个人认为,应用层的心跳报文与TCP连接的Keep-alive机制在功能上是一样的效果,但是TCP的的这种机制存在弊端(如:在TCP建立连接后启用定时器,若没到定时器设置的时间点发生中断,那么TCP不能及时将连接断开),而应用层的心跳机制可以设置数据发送的频率,因此心跳报文的功能只是负责告诉对方我在线,而不需要进行其它功能的交互。
欢迎大家多多关注我,在下方评论区说出自己的见解。
心跳机制主要考虑服务器资源及时回收,要知道服务器端并发要求是很高的,每一个TCP链接都会在服务器端分配相应的内存资源,如果客户端已经掉线,但是服务器却不知道,不能及时释放资源,再进来新的链接,由于没有足够的内存资源分配,可能导致拒绝服务的问题