如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制相关的知识,希望对你有一定的参考价值。

参考技术A

通过 长时间保持双方连接 ,从而:

下面,我将对每种原因进行分析

当进程被杀死后,长连接也会随之断开

当移动客户端网络状态发生变化时(如移动网络 & Wifi切换、断开、重连),也会使长连接断开

如网络状态差、 DHCP 的租期到期等等,都会使得长连接发生 偶然的断开

其实,说得简单点: 高效维持长连接的关键在于

整体概括如下:

这是本文的重点,下节开始会详细解析

对国、内外主流的移动 IM 产品( WhatsApp 、 Line 、微信)进行了心跳机制的简单分析 & 对比,具体请看下图

下面,将根据市面上主流的心跳机制,设计 一套心跳机制方案

在下面的方案设计中,将针对这3个问题给出详细的解决方案。

为了减少流量 & 提高发送效率,需要精简心跳包的设计

主要从心跳包的内容 & 大小入手,设计原则具体如下

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

为了 防止 NAT 超时 & 减少设备资源的消耗(网络流量、电量、CPU等等), 心跳发送的间隔时间 是 整个 心跳机制方案设计的重点。

心跳发送间隔时间的设计原则如下

下面,我将详细讲解 自适应心跳间隔时间 的设计方案

1.如何自适应计算心跳间隔 从而使得心跳间隔 接近 当前 NAT 超时时间?

注:只有当心跳间隔 接近 NAT 超时时间 时, 才能最大化平衡 长连接不中断 & 设备资源消耗最低的问题

2.如何检测 当前网络环境的 NAT 超时时间 发生了变化 ?

注:在检测到 NAT 超时时间 发生变化后,重新自适应计算心跳间隔 从而使得心跳间隔 接近 NAT 超时时间

该机制的核心在于, 如何 判断长连接的有效性

在网上流传着一些用于判断长连接是否有效的方案,具体介绍如下

至此,关于心跳保活机制已经讲解完毕。

很多人认为, TCP 协议自身就有 KeepAlive 机制,为何基于它的通讯链接,仍需 在应用层实现额外的心跳保活机制

先来看看 KeepAlive 机制 是什么

KeepAlive 的机制 不可 替代心跳机制 的具体原因如下:

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

不定期分享关于 安卓开发 的干货,追求 短、平、快 ,但 却不缺深度

手把手教你使用 virtualBox 让虚拟机连接网络

参考技术A

打开设置-》网络

采用桥接模式连接网络,并选择对应的物理网卡。

注意: 这里 “界面名称” 必须选择实际的物理网卡。

1、使用 nmcli 命令,查看当前虚拟机的所有网络基本信息:

nmcli connection show

具体参数说明如下:

2、设置 centos7 的网络获取方式为自动获取 IP(这种方法最方便啦 O(∩_∩)O~)

3、上面的命令只是修改了设定档,因此还要使用 nmcli 的 up 参数让它实际生效:

使用 ping 命令验证:

成功啦,我们的 virtualBox 的这台虚拟机连上外网啦 O(∩_∩)O~

以上是关于如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制的主要内容,如果未能解决你的问题,请参考以下文章

网络编程之手把手教你写基于TCP的Socket长连接

手把手教你写 Socket 长连接

TensorFlow2 手把手教你实现自定义层

手把手教你实现自定义的应用层协议

手把手教你使用Java实现一个神经网络

手把手教你如何高效落地单项目管理 | 一看既会