如何实现高效的IM即时通讯长连接自适应心跳保活机制

      最后更新:2022-06-09 19:14:59 手机定位技术交流文章

      当实现IM即时消息聊天和消息传送等高实时要求时,我们通常选择长期连接的通信方法。

      然而,在实现长连接方法时,有许多技术问题,如最常见的长连接维护问题。


      长途连接的主要功能是维持双方的长途连接,即:

      • 1)提高通信速度;
      • 2)确保实时性;
      • 3)避免在短时间内由于重复连接而浪费渠道和网络资源.

      PS: 对于像IM这样的开发者来说,HTTP协议通常被称为“短连接”,而直接基于TCP、UDP或WebSocket的接口称为“长连接”。

      如上节所示,当使用长途连接时,双方之间的所有通信都建立在单一长途连接上(比如1次TCP连接因此,双方必须保持长距离联系,以便双方能持续沟通。

      然而,现实是,长期的连接可以被中断。

      这些中断的主要原因如下:

      • 1)长期连接位置的进程被终止(这主要是指移动端);
      • 2)NAT超时;
      • 3)网络状态发生变化;
      • 4)其他不可避免的因素(网络状态差异, DHCP租赁期等)。


      下面, 我将分析每个原因.

      原因1:程序失败

      当进程终止时,长连接也将被切断。 进程终止是安德鲁末端最常见的问题

      原因2:NAT超时(集中注意)

      特别注意:排除其他外部因素(网络交换、NAT加班、人类原因当双方连续连接时,TCP长途连接不会自动中断也就是说,你不需要一个心跳袋来维持,让我们验证一下: 让我们把两个计算机连接到一个 Wifi,其中一个是服务器,另一个是客户端连接服务器(没有KeepAlive设置)。只要计算机和路由器不断脱离网络,那么,两个计算机之间的长距离连接不会自动中断)。

      3)原因3:网络状态的变化

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

      原因4:其他不可克服因素

      例如网络状态差异,DHCP租赁期过期等,会造成长时间的连接意外发生。 DHCP租赁期过期:对于Android系统,DHCP在租赁期过期后不提供主动续期(继续使用过期IP这导致了长时间的连接故障。

      长距离连接的高性能解决方案

      在了解长连接断开原因后,针对这些原因,此处给出我的长距离连接的高性能解决方案

      简单地说,有效维护长途连接的关键是:

      • 1)维护:在连接状态时尽量避免干扰;
      • 2)重新连接:在连接失败后,您可以继续重新连接。

      心跳保活机制

      这是本文的重点,将在下一节详细分析

      断线重连机制

      该原理是检测网络状态的变化,并确定网络连接的有效性。
      具体实现:这实际上是一个完整的逻辑与心跳机制的集合,因此以下将在心跳机制中一起解释。

      主流IM心跳机制的分析与比较


      国内和国外主流移动IM产品(WhatsApp, Line, WhatsApp对心动机理进行了简单的分析和比较.

      全盘设计心脏生存机制计划


      在此基础上,我将设计一套基于市场主机动的心脏跳动机制方案。

      心脏跳动机理的设计的主要考虑是:

      • 1)确保消息的实时性质;
      • 2)考虑设备的资源消耗(网络流量、功率、CPU等)。


      从图表上可以看出,心脏跳动机理的设计的主要点是:

      • 1)心跳包的规格(内容 & 大小);
      • 2)转播的心脏跳动的间隔时间;
      • 3)连接机制(核心 = 如何评价长途连接的有效性).


      下面的程序设计将为这些问题提供详细的解决方案。

      心跳包的规格


      为了减少流量和提高传送效率,需要简化心脏拍包的设计。

      设计方案:

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

      心跳发送的间隔时间


      防止NAT加班和减少设备资源的消耗(网络流量 、 电力 、 CPU等.整个心跳机制方案设计的重点是心跳传输的间隔时间。

      常用的心跳间隔计划


      一般来说,采用最直接和常见的心跳发送间隔时间设置方案:"一个心跳包每估计的x分钟间隔发送一次",其中x<5分钟是足够(整合主流移动IM产品,这是建议 x=4分钟)。

      自适应心跳间隔方案

      1)如何调整心率间隔的计算,使心率间隔接近当前NAT加班时间?

      A:增加心率间隔用于测试心率响应,直到心率失败五次才能找到心率间隔最接近当前NAT加班时间。

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

      2)如何检测当前网络环境的NAT加班时间的变化?

      A:当前成功的心脏拍子包的最大间隔时间(也就是说,心率间隔最接近NAT超时在5次失败后,当前网络环境的NAT加班时间被认为已经改变。

      注:在检测NAT加班时间的变化后,调整心率间隔的计算,使心率间隔更接近NAT加班时间

      断线重连机制的实现


      从技术上讲:长期连通的心脏跳动维持取决于心脏跳动机制,在心脏跳动机制方面,及时启动故障线的重新连接机制,通过心率机理的联合作用和断层的再连接机理,可以实现真正的心率存活。但为了使逻辑更加清晰,我将分别解释相互连接机制和心脏跳动机制。本文论述了芯片线的再连接机制.

      该机制的核心是如何评价长途连接的有效性。 在什么情况下,长途连接被切断?

      1)设计原则:

      基本逻辑是: 确定一个长连接是否有效的标准=服务器是否返回一个心跳响应。

      2)具体方案:

      为了实现这个想法:通过计算,如果服务器发送五次连续的心脏跳动,并且服务器没有心脏跳动响应,那么长连接被认为是无效。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/26874.html

          热门文章

          文章分类