最后更新:2022-06-09 19:14:59 手机定位技术交流文章
当实现IM即时消息聊天和消息传送等高实时要求时,我们通常选择长期连接的通信方法。
然而,在实现长连接方法时,有许多技术问题,如最常见的长连接维护问题。
长途连接的主要功能是维持双方的长途连接,即:
PS: 对于像IM这样的开发者来说,HTTP协议通常被称为“短连接”,而直接基于TCP、UDP或WebSocket的接口称为“长连接”。
如上节所示,当使用长途连接时,双方之间的所有通信都建立在单一长途连接上(比如1次TCP连接因此,双方必须保持长距离联系,以便双方能持续沟通。
然而,现实是,长期的连接可以被中断。
这些中断的主要原因如下:
下面, 我将分析每个原因.
原因1:程序失败
当进程终止时,长连接也将被切断。 进程终止是安德鲁末端最常见的问题
原因2:NAT超时(集中注意)
特别注意:排除其他外部因素(网络交换、NAT加班、人类原因当双方连续连接时,TCP长途连接不会自动中断也就是说,你不需要一个心跳袋来维持,让我们验证一下: 让我们把两个计算机连接到一个 Wifi,其中一个是服务器,另一个是客户端连接服务器(没有KeepAlive设置)。只要计算机和路由器不断脱离网络,那么,两个计算机之间的长距离连接不会自动中断)。

3)原因3:网络状态的变化
当移动客户端网络状态发生变化时(如移动网络 & Wifi切换、断开、重连),它也切断了长连接。
原因4:其他不可克服因素
例如网络状态差异,DHCP租赁期过期等,会造成长时间的连接意外发生。 DHCP租赁期过期:对于Android系统,DHCP在租赁期过期后不提供主动续期(继续使用过期IP这导致了长时间的连接故障。
在了解长连接断开原因后,针对这些原因,此处给出我的长距离连接的高性能解决方案
简单地说,有效维护长途连接的关键是:
心跳保活机制
这是本文的重点,将在下一节详细分析
断线重连机制
该原理是检测网络状态的变化,并确定网络连接的有效性。
具体实现:这实际上是一个完整的逻辑与心跳机制的集合,因此以下将在心跳机制中一起解释。
国内和国外主流移动IM产品(WhatsApp, Line, WhatsApp对心动机理进行了简单的分析和比较.
在此基础上,我将设计一套基于市场主机动的心脏跳动机制方案。
心脏跳动机理的设计的主要考虑是:
从图表上可以看出,心脏跳动机理的设计的主要点是:
下面的程序设计将为这些问题提供详细的解决方案。
为了减少流量和提高传送效率,需要简化心脏拍包的设计。
设计方案:
心跳包 = 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)具体方案:
为了实现这个想法:通过计算,如果服务器发送五次连续的心脏跳动,并且服务器没有心脏跳动响应,那么长连接被认为是无效。
本文由 在线网速测试 整理编辑,转载请注明出处。