心跳数据包发送方法与流程

文档序号:17246765发布日期:2019-03-30 08:51阅读:2015来源:国知局
心跳数据包发送方法与流程

本发明涉及移动通信领域,特别是涉及一种基于udp(用户数据报协议)的心跳数据包发送方法。



背景技术:

心跳多用于基于长连的通讯系统中,用于持续的通知后台服务器客户端依旧存活。心跳包就是双方所定义的一种用来通知对方存活的数据通讯结构。

周期性的发心跳包给服务器主要有以下几个原因:

1、通知服务器客户端存活状态,一旦服务器监测到在某段时间没有收到客户端发来的心跳包,服务器就会释放曾经为此客户端分配的所有资源,例如socket连接。

2、定时的刷新nat内外网ip映射表,以便防止nat路由器移除映射表,导致客户端和服务器端的连接中断,特别是基于udp的服务,路由表更新非常频繁。

一个简单的实现就是定期的给服务器发送心跳包,但这种实现引出一个问题,就是周期时间间隔是多少为合适?

由于不同的网络拓扑结构的实现,nat节点会分配到不同的网路路由当中,不同的nat有不同的策略来处理映射表,一旦nat发现某个映射表对应ip在某段时间内没有上行或下行数据,nat就会移除此ip映射表,导致连接被中断。

另一个问题是以较短的时间间隔周期性地向服务器发送心跳包,会加大客户端尤其是移动设备的功耗和流量的消耗。

基于以上考虑设计一种智能心跳,可以根据不同的网络情况,自动调整发送心跳包的周期,以解决上述所提出的问题。



技术实现要素:

本发明针对现有技术存在的问题和不足,提供一种新型的心跳数据包发送方法,用于解决固定周期的心跳给客户端带来过多功耗和流量的消耗以及给服务器端带来的巨大访问压力的问题。

本发明是通过下述技术方案来解决上述技术问题的:

本发明提供一种心跳数据包发送方法,其特点在于,其包括以下步骤:

s1、客户端与目标服务器建立基于udp的socket连接,连接建立后,目标服务器缓存相应客户端的连接地址;

s2、客户端启动心跳线程,用预设短心跳周期为时间间隔向目标服务器发送三次心跳数据包,若三次心跳交互都成功,则进入步骤s3;

s3、客户端开始探测心跳周期最大值,客户端在预设短心跳周期基础上增加设定步长作为下一次发送心跳数据包的时间间隔,针对心跳周期递归增加其步长,直至心跳失败,然后取比最新的一个心跳成功值小一点的值作为心跳周期的最大值;自适应心跳计算状态;

s4、客户端以心跳周期最大值为周期发送心跳数据包,进入稳定态。

较佳地,步骤s4之后包括以下步骤:

s5、一段时间后,在心跳周期最大值的基础上增加步长,继续探测心跳周期最大值,以适应nat超时时间变长的情况。

较佳地,目标服务器收到心跳数据包后,将收到的心跳数据包的地址与已缓存的上个发送的心跳数据包的地址作比较,若地址改变,目标服务器立即做相应更新,并为客户端回复一个nat变更数据包,若标识未改变,则向客户端返回一个针对该心跳数据包的确认数据包。

较佳地,在步骤s5中,客户端收到来自目标服务器的nat变更数据包,则客户端取最近一次心跳周期最大值的一半的值作为基础,重新探测心跳周期最大值。

较佳地,若客户端连续三次心跳包均未得到目标服务器的回执,则客户端认为目标服务器已发生故障,客户端关闭socket连接。

在符合本领域常识的基础上,上述各优选条件,可任意组合,即得本发明各较佳实例。

本发明的积极进步效果在于:

本发明引入短心跳机制、自适应心跳机制和successheart心跳机制,用于解决固定周期的心跳给客户端带来过多功耗和流量的消耗以及给服务器端带来的巨大访问压力的问题。

附图说明

图1为本发明较佳实施例的心跳数据包发送方法的流程框图。

图2为客户端发向目标服务器的心跳数据结构。

图3为服务端收到心跳数据后向客户端发送的回执数据,如果服务端检测到端口号改变,则将nat字段值置为1,否则将其置为0。

图4为本发明客户端和目标服务器对心跳数据包处理的逻辑流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1-4所示,本实施例提供一种心跳数据包发送方法,其包括以下步骤。

客户端与目标服务器建立基于udp的socket连接,连接建立后,目标服务器缓存相应客户端的连接地址。

客户端启动心跳线程,并向目标服务器发送心跳数据包。

在用户通过客户端与目标服务器建立网络通信连接过程中,在客户端断开与目标服务器的通信之前,客户端为了告知目标服务器其为在线状态,通过向目标服务器发送心跳数据包,以确保通信连接的有效性。

客户端向目标服务器发送心跳数据包的目的在于与目标服务器保持长连接,至于心跳数据包中包含的具体内容没有特别的规定,不过,为了减轻目标服务器对心跳数据包的处理资源,心跳数据包一般都是很小的包,或者只包含包头的一个空包。本发明实施例对心跳数据包中包含的具体内容不作限定。

目标服务器收到来自客户端的心跳包后,相应地向客户端回执一个数据包。如图3所示,如果服务端检测到端口号改变,则将nat字段值置为1,否则将其置为0。

现有技术中,客户端每隔固定时间间隔会向服务器发送一次心跳数据包请求,这样会增大客户端的功耗,也会增加服务器的访问负荷,影响服务器的响应速度。

为了解决上述问题,客户端在将心跳数据包发送给目标服务器时,引入短心跳机制和自适应心跳机制。

在具体实施时,客户端先用预设短心跳周期为时间间隔向目标服务器发送三次心跳数据包,如果三次心跳交互都成功,则客户端进入自适应心跳状态,否则断开连接。

自适应心跳机制的核心在于探测心跳最大值,客户端在预设短心跳周期基础上增加步长作为下一次发送心跳数据包的时间间隔,针对心跳周期递归增加其步长,直至收到来自目标服务器的nat变更数据包,然后取比最新的一个心跳成功值小一点的值作为心跳周期的最大值,即successheart,然后客户端以successheart为周期发送心跳,进入稳定态。

取比最新的一个心跳成功值小一点的值作为心跳周期的最大值,是为了规避nat超时的临界值。

处于稳定态的客户端将以successheart为周期发送心跳,一段时间后,在successheart基础上增加步长,继续探测心跳最大值,以适应nat超时时间变长的情况。

目标服务器收到心跳数据包后,将现有地址与已缓存的地址作比较,如果地址改变,目标服务器立即做相应更新,并为客户端回复一个nat变更的数据包,如果地址未改变,则向客户端返回一个针对该心跳数据包的确认数据包。

如果客户端收到来自目标服务器端的nat变更数据包,则客户端取最近一次successheart周期一半的值作为基础,重新探测心跳周期最大值。

如果客户端连续三个心跳包都没有得到服务端的回执,则认为服务端已故障,客户端关闭socket连接。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1