博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Socket 心跳包机制总结
阅读量:5917 次
发布时间:2019-06-19

本文共 840 字,大约阅读时间需要 2 分钟。

跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。
      在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。
      心跳包一般来说都是在逻辑层发送空的echo包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。
      其实,要判定掉线,只需要send或者recv一下,如果结果为零,则为掉线。但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。
      在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的数据清理呀,重新连接呀……当然,这个自然是要由逻辑层根据需求去做了。
      总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。
 
心跳检测步骤:
1 客户端每隔一个时间间隔发生一个探测包给服务器
2 客户端发包时启动一个超时定时器
3 服务器端接收到检测包,应该回应一个包
4 如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器
5 如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了
 

转载于:https://www.cnblogs.com/yangwujun/p/6479909.html

你可能感兴趣的文章
微信小程序开发之scroll-view
查看>>
cmd隐藏指定文件
查看>>
OpenCV——轮廓特征描述
查看>>
PHP+Apache怎样监控多个port和配置多网站
查看>>
调整的R方_如何选择回归模型
查看>>
装载Properties资源文件的项目中使用
查看>>
PAT 1003 Sharing (25)
查看>>
转 CAS实现SSO单点登录原理
查看>>
UVa 12587 Reduce the Maintenance Cost(Tarjan + 二分 + DFS)
查看>>
[转]Commons IO 官方文档
查看>>
Servlet 3.0的AsyncListener接口
查看>>
10进制转16进制
查看>>
mysql生产环境____主从同步修复案例
查看>>
【Scala】Scala的Predef对象
查看>>
c++11之初始化列表
查看>>
Shell、Xterm、Gnome-Terminal、Konsole简介(转)
查看>>
Java集合框架GS Collections具体解释
查看>>
Android webview 运行时不调用系统自带浏览器
查看>>
Excel的单元格设置下拉选项并填充颜色
查看>>
分享一个php代码创建目录的Demo
查看>>