在以TCP为连接方式的服务器中,为什么在服务端设计当中需要考虑心跳?

未结帖
0 907
ajian admin_jim 2018-03-28
悬赏:5飞吻

“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

心跳机制是在数据通信连接中,定时发送一个自定义结构的心跳报文,让对端清楚自己还在线,保证连接的有效性。

tcp1.jpg

如题,服务器端在设计心跳的主要目的就是为了探测对端是否还正常在线,两端都可以发送心跳的报文,主要通过此方式去判断用户侧是否在线,若不在线则对服务器端的缓存数据进行清理,即主动对用户进行下线操作。以游戏服务端为例做举例:

当用户登录某游戏进行试玩,因为其它原因长时间挂机,没有操作,这时服务器端与客户端就会交互心跳报文,证明此用户还在线,因此会保证用户连接状态,但也可以设置对应时间段内若没有任何操作进行下线处理;

当用户登录游戏后,因为其它原因造成主机非正常关机,没有根据正常的操作步骤去下线,这时就会通过心跳报文来判断主机是否正常在线,若不在线即可直接进行下线处理。tcp2.jpg

个人认为,应用层的心跳报文与TCP连接的Keep-alive机制在功能上是一样的效果,但是TCP的的这种机制存在弊端(如:在TCP建立连接后启用定时器,若没到定时器设置的时间点发生中断,那么TCP不能及时将连接断开),而应用层的心跳机制可以设置数据发送的频率,因此心跳报文的功能只是负责告诉对方我在线,而不需要进行其它功能的交互。tcp3.jpg

欢迎大家多多关注我,在下方评论区说出自己的见解。




心跳机制主要考虑服务器资源及时回收,要知道服务器端并发要求是很高的,每一个TCP链接都会在服务器端分配相应的内存资源,如果客户端已经掉线,但是服务器却不知道,不能及时释放资源,再进来新的链接,由于没有足够的内存资源分配,可能导致拒绝服务的问题


热忱回答0


最近热帖

近期热议

  1. javascript——prototype与__proto 9
  2. Mysql 中出现的Data truncated for column 3
  3. 在nginx中使用x-sendfile的解决方案 3
  4. 高版本jQuery面插件实现Ajax上传图片 1
  5. Thinkphp Socket.class.php 类的使用 1
  6. 使用ionic3创建第一个App 0
  7. ios-oc html5 0
  8. nginx.conf 0
  9. 基于ionic3.4.0的项目搭建 0
  10. php 缩略图 0