概述

心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。长连接断开后一直占用系统资源,可以通过心跳包判断连接是否断开;使用心跳包检测到连接已经死了,就断开连接。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。
在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。
总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。

心跳包

应用程序在逻辑层发送心跳包(空的echo包)来判断与服务器的链接是否正常,一般方法如下:首先是服务器在一个Timer事件中定时向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,则可认为客户端已经掉线;同样,如果客户端在一定时间内没有收到服务器的心跳包,则可认为连接不可用。
心跳检测步骤:
1 客户端每隔一个时间间隔发生一个探测包给服务器
2 客户端发包时启动一个超时定时器
3 服务器端接收到检测包,应该回应一个包
4 如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器
5 如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了

乒乓包

乒乓包大致的意思可总结为在心跳包发送的基础上,附加了少量简单的数据信息。
如面试题:朋友圈有人点赞评论的显示原理简单介绍,客服端如果知道有人点赞评论,服务器如何将相应的点赞评论的数据发送至客户端?
1.微信客户端每隔一段时间就向服务器询问,是否有人评论?
2.当服务器检查到有人给评论时,服务器发送一个乒乓包给客户端,该乒乓包中携带的数据是[有 人评论的标志位]
注:步骤1和2,服务器和客户端不需要建立连接,只是发送简单的乒乓包。
3.当客户端接收到服务器回复的带有评论标志位的乒乓包后,才真正的去和服务器通过三次握手建立连接;建立连接后,服务器将评论的数据发送给客户端。

SO_KEEPLIVE

1.因为要考虑到一个服务器通常会连接多个客户端,因此由用户在应用层自己实现心跳包,代码较多 且稍显复杂,而利用TCP/IP协议层为内置的KeepAlive功能来实现心跳功能则简单得多。
2.不论是服务端还是客户端,一方开启KeepAlive功能后,就会自动在规定时间内向对方发送心跳包, 而另一方在收到心跳包后就会自动回复,以告诉对方我仍然在线。
3.因为开启KeepAlive功能需要消耗额外的宽带和流量,所以TCP协议层默认并不开启KeepAlive功 能,尽管这微不足道,但在按流量计费的环境下增加了费用,另一方面,KeepAlive设置不合理时可能会 因为短暂的网络波动而断开健康的TCP连接。并且,默认的KeepAlive超时需要7,200,000 MilliSeconds, 即2小时,探测次数为5次。对于很多服务端应用程序来说,2小时的空闲时间太长。
其实有些说法认为SO_KEEPLIVE的意义不大,就是如果服务器端没有心跳机制,那么客户端连接上来以后,客户端突然断线,那么服务器端不知道对方已掉线,依然会保持连接,但是目前绝大多数软件都自带心跳机制。所以它并没有什么用。

心跳包、乒乓包、SO_KEEPLIVE相关推荐

  1. Android 通过 NSD 服务 Netty(断线重连、心跳、黏包处理) 实现两个 Android 系统端的长连接通讯

    引言 近期需求,通过手机App端取号机(含叫号通知功能),实时连接 另一台 Android 广告机用于播放当前被叫到的号数. 这里有两种Android 机 一台「基于Sunmi版的可出小票的Andro ...

  2. TCPIP协议栈的心跳、丢包重传、连接超时机制实例详解

    目录 1.问题概述 2.TCPIP协议栈的心跳机制 2.1.TCP中的ACK机制 2.2.TCPIP协议栈的心跳机制说明 2.3.修改TCPIP协议栈的默认心跳参数 3.libwebsockets开源 ...

  3. Go 学习笔记(3)— 包概念、包特点、包名约束、main 包、包的声明、包的引用、包初始化

    1. 包的概念 Go 语言是使用包来组织源代码的,并实现命名空间的管理.任何源代码文件必须属于某个包.源码文件的第一行有效代码必须是 package pacakgeName 语句,通过该语句声明自己所 ...

  4. 全网最简单的网络图画法,小白福音包学包会

    全网最简单的网络图画法,小白福音包学包会 徐锐(助理研究员),广东省生态环境技术研究所,土壤微生物与宏基因组方向 版本1.0.1,更新日期:2020年6月23日 本项目永久地址:https://git ...

  5. 包吃包住包机票的培训你见过吗?云南高通量条形码培训班,截止5月31日

    文章目录 2019年中国云南高通量条形码培训班 划重点 简介 日程 申请 授课教师 课程安排 培训地点 旅行 要求 参考文献 猜你喜欢 写在后面 2019年中国云南高通量条形码培训班 2019年云南高 ...

  6. R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片

    R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片 目录

  7. R语言可视化包ggplot2包移除可视化图形的轴标签(刻度及其对应数值)实战(Remove Axis Labels)

    R语言可视化包ggplot2包移除可视化图形的轴标签(刻度及其对应数值)实战(Remove Axis Labels) 目录

  8. R语言可视化包ggplot2包通过因子变量设置图像颜色实战

    R语言可视化包ggplot2包通过因子变量设置图像颜色实战 目录 R语言可视化包ggplot2包通过因子变量设置图像颜色实战 <

  9. R语言可视化包ggplot2包绘制多个图形并将多个图像垂直堆叠c成一个图像实战(grid.arrange)

    R语言可视化包ggplot2包绘制多个图形并将多个图像垂直堆叠c成一个图像实战(grid.arrange) 目录

  10. R语言可视化包ggplot2包调整线条粗细实战(Adjust Line Thickness)

    R语言可视化包ggplot2包调整线条粗细实战(Adjust Line Thickness) 目录 R语言可视化包ggplot2包调整线条粗细实战(Adjust Line Thickness)

最新文章

  1. 图神经网络世界冠军团队手把手授课,7天搞定图神经网络!
  2. VTK:图表之DepthFirstSearchAnimation
  3. 最大子段和 分治与动态规划
  4. mac按文件名查找文件_如何在Mac上查找和删除大文件
  5. 加速你的Hibernate引擎(上)
  6. pb9 调用系统语音_成都电销系统一个月多少钱_选择灵狐传媒_收费透明
  7. 某系统有6台输出设备 有多个进程均需要使用2台_系统设计硬核知识(4)——操作系统的设备管理...
  8. 可信云认证累计达20项,腾讯云技术创新能力再获专业认可
  9. linq 学习日记-select
  10. 动画|经典的归并排序究竟怎么玩儿?
  11. Android利用canvas画画板
  12. 面试官:有了 for 循环,为什么还要 forEach ??
  13. 电脑端输入法的一些设置
  14. 牛客网项目——项目开发(三):开发登录模块
  15. HTML 超文本标记语言
  16. 55寸电视尺寸长宽高多少
  17. phpmywind最新版sql注入以及后台目录遍历和文件读取
  18. 集成第三方SDK——支付宝支付
  19. python修改key名_python修改字典键(key)的方法
  20. pymysql 插入错误:Warning(1265, “Data truncated for column ‘XXXX‘ at row xxx“)

热门文章

  1. Tsai分享:资源分享(1)——视觉SLAM十四讲及视频
  2. 兰亭字体linux版本,两种方法,让最新版 Windows 10 的字体更「养眼」
  3. matlab查表svpwm,SVPWM的查表生成方式代码
  4. 吴昊品游戏核心算法 Round 5 —— (转载)十四步实现拥有强大AI的五子棋游戏...
  5. 算法图解 -- 书评
  6. 【深度学习】Colaboratory使用:Google云盘挂载及GPU使用
  7. Windows 虚拟机介绍以及安装系统教程
  8. SecureCRT 7.3软件下载及破解工具+教程
  9. SWAT模型学习小技巧(前言)
  10. php把日期转成时间戳,php如何把日期转为时间戳