长连接断开的原因
-
长连接所在进程被杀死
-
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.pngTCP 协议自带 KeepAlive 的机制 是否 可替代心跳机制?
无法替代,TCP KeepAlive机制 的作用 是检测连接的有无(死活),但无法检测连接是否有效。
“连接有效”的定义 = 双方具备发送 & 接收消息的能力
KeepAlive机制无法代替心跳机制,需要在应用层 自己实现心跳机制以检测长连接的有效性,从而高效维持长连接。
KeepAlive 机制只是操作系统底层的一个被动机制,不应该被上层应用层使用,当系统关闭一个由KeepAlive 机制检查出来的死连接时,是不会主动通知上层应用的,只能通过调用相应IO操作的返回值中发现。
网友评论