美文网首页
心跳保活

心跳保活

作者: Drew_MyINTYRE | 来源:发表于2021-07-03 10:32 被阅读0次

长连接断开的原因

  • 长连接所在进程被杀死

  • NAT超时

  • 网络状态发生变化

  • 其他不可抗因素(网络状态差、DHCP的租期等等 )

什么是 NAT 超时?

NAT.png

各运营商 & 地区的 NAT超时时间如下:

timeout.png

高效维持长连接的解决方案

solution.png

心跳机制 vs 轮询机制

heart-keep-alive.png

主流产品心跳机制分析对比

compare.png

对于心跳机制方案设计的要点在于

  • 心跳包的规格(内容 & 大小)

心跳包 = 1个携带少量信息 & 大小在10字节内的信息包

  • 心跳发送的间隔时间

每隔估计 x(< 5) 分钟发送心跳包1次

  • 断线重连机制 (核心 = 如何 判断长连接的有效性)

若连续5次发送心跳后,服务器都无心跳应答,则视为长连接无效,确保当前网络的有效性 & 稳定性再开始长连接

判断长连接是否有效的方案,仅供参考:

long-live-isvalid.png

TCP 协议自带 KeepAlive 的机制 是否 可替代心跳机制?

无法替代,TCP KeepAlive机制 的作用 是检测连接的有无(死活),但无法检测连接是否有效。

“连接有效”的定义 = 双方具备发送 & 接收消息的能力

KeepAlive机制无法代替心跳机制,需要在应用层 自己实现心跳机制以检测长连接的有效性,从而高效维持长连接。

KeepAlive 机制只是操作系统底层的一个被动机制,不应该被上层应用层使用,当系统关闭一个由KeepAlive 机制检查出来的死连接时,是不会主动通知上层应用的,只能通过调用相应IO操作的返回值中发现。

总结

2.png

感谢

相关文章

  • 心跳保活

    长连接断开的原因 长连接所在进程被杀死 NAT超时 网络状态发生变化 其他不可抗因素(网络状态差、DHCP的租期等...

  • 【tcp】心跳检测,保活机制

    为什么要心跳检查? 因为目前讨论的数据连接场景,都是无源连接,排除NAT的情况,连接就是存在于src和dest两端...

  • TCP长连接与心跳保活

    可能很多 Java 程序员对 TCP 的理解只有一个三次握手,四次握手的认识,我觉得这样的原因主要在于 TCP 协...

  • 心跳协议设计

    为什么需要应用层心跳?Tcp Keepalive 能不能代替心跳? 保活一个客户端连接服务器以后,如果长期没有和服...

  • netty 心跳包和断线重连机制

    为什么需要心跳包??? 心跳包主要是用来做TCP长连接保活的。有时 socket 虽然是连接的但中间网络可能有问题...

  • swoole源码-tcp链接keep-alive机制

    swoole server中 tcp链接keep-alive保活设置很简单官方文档: TCP服务器心跳维持方案官方...

  • 长连接及心跳保活原理简介

      本文简要的分析了长连接产生的背景以及所解决的问题,并对比了keep-alive与心跳机制对长连接保活的影响,最...

  • 谈谈长连接和心跳保活机制

    1.长连接介绍 通信双方进行TCP链接后进行通信,结束后不主动关闭链接优点:通信速度快,免去了DNS解析时间,以及...

  • IM序列6:一种Android端IM智能心跳算法的设计与实现探讨

    1、前言 对于IM或实时消息推送技术来说,客户端的心跳算法几乎是必备品,尤其当前复杂的移动网络环境下,网络心跳保活...

  • iOS后台保活

    iOS后台保活按时间可分为短时保活和长时间保活 短时保活的方式通过beginBackgroundTaskWithN...

网友评论

      本文标题:心跳保活

      本文链接:https://www.haomeiwen.com/subject/valeultx.html