基于TCP协议长连接的心跳间隔调整方法、装置与流程

文档序号:26709184发布日期:2021-09-22 18:44阅读:404来源:国知局
基于TCP协议长连接的心跳间隔调整方法、装置与流程
基于tcp协议长连接的心跳间隔调整方法、装置
技术领域
1.本发明涉及通信技术领域,尤其涉及基于tcp协议长连接的心跳间隔调整方法、装置。


背景技术:

2.tcp(tcp,transmission control protocol)协议,即传输控制协议,现如今被广泛应用在网络通信技术领域之中。tcp中的保活机制是用于在利用tcp协议通讯的双方之间,长时间未进行通讯或者数据传输的情况下,通过发送心跳包(保活探测报文)确保对方存活(通信连接失效或者对方不再反馈信息)的机制。
3.现有技术中所采用的保活机制方案,发送心跳包的时间间隔固定,不能依据实际应用情况进行调整。在国内移动网络环境下,各个地方运营商在不同的网络类型下的nat(network address translation,网络地址转换)时间差异性很大,nat超时后tcp连接中断。采用的固定心跳间隔时间在实现上虽然相对较为简单,但为了避免nat超时,只能将心跳间隔设置为小于所有网络环境下nat超时时间的最短时间,但对于设备cpu、电量和网络流量等资源无法做到最大程度的节约。


技术实现要素:

4.发明目的:本发明旨在提供一种基于tcp协议长连接的心跳间隔调整方法、装置。
5.技术方案:本发明提供一种基于tcp协议长连接的心跳间隔调整方法,包括:
6.步骤1,以当前心跳值设置心跳时钟,进行计时;
7.步骤2,在一次心跳时钟的时间内,若没有接收到服务端的请求,则在心跳时钟的时间结束时,由客户端向服务端发送心跳,判断是否收到服务端的返回,根据是否返回,进入步骤3或步骤4;
8.步骤3,若收到服务端的返回,稳定心跳计数增加固定数值,判断稳定心跳计数是否达到预定阈值,若没有达到,则返回步骤1;若已经达到,则稳定心跳计数清零,对当前心跳值进行上调后返回步骤1;
9.步骤4,若没有收到服务端的返回,判断客户端向服务端发送心跳的次数,若没有达到标准次数,则继续发送心跳,根据是否返回,进入步骤3或重新执行步骤4;若已经达到标准次数,则断开连接;
10.步骤5,断开连接后稳定心跳计数清零,对当前心跳值进行下调后返回步骤1。
11.具体的,所述步骤1,之前包括:设定初始最小心跳值、初始最大心跳值、当前心跳值、当前最小心跳值和当前最大心跳值,当前心跳值在所述初始最小心跳值和初始最大心跳值之间取值,客户端和服务端之间建立tcp协议长连接。
12.具体的,所述步骤2,包括:在一次心跳时钟的时间内,若接收到服务端的请求,返回步骤1。
13.具体的,所述对当前心跳值进行上调,包括:根据当前心跳值和当前最大心跳值之
间的数值关系,确定是否对当前心跳值调整;
14.若对当前心跳值进行调整,采用以下公式计算当前心跳值:
15.currentminh=curenth,
16.curenth=(currentminh+currentmaxh)/2;
17.其中,curenth表示当前心跳值,currentminh表示当前最小心跳值,currentmaxh表示当前最大心跳值。
18.具体的,所述对当前心跳值进行下调,包括:采用以下公式计算当前心跳值:
19.currentmaxh=curenth,
20.curenth=(currentminh+currentmaxh)/2。
21.本发明还提供一种基于tcp协议长连接的心跳间隔调整装置,包括:设置单元、心跳发送单元、心跳上调单元、连接断开单元和心跳下调单元,其中:
22.所述设置单元,用于以当前心跳值设置心跳时钟,进行计时;
23.所述心跳发送单元,用于在一次心跳时钟的时间内,若没有接收到服务端的请求,则在心跳时钟的时间结束时,向服务端发送心跳,判断是否收到服务端的返回;
24.所述心跳上调单元,用于若收到服务端的返回,稳定心跳计数增加固定数值,判断稳定心跳计数是否达到预定阈值,若没有达到,则设置单元开始运行;若已经达到,则稳定心跳计数清零,对当前心跳值进行上调后设置单元开始运行;
25.所述连接断开单元,用于若没有收到服务端的返回,判断向服务端发送心跳的次数,若没有达到标准次数,则继续发送心跳,根据是否返回,心跳上调单元开始运行或连接断开单元重新运行;若已经达到标准次数,则断开连接;
26.所述心跳下调单元,用于断开连接后稳定心跳计数清零,对当前心跳值进行下调后设置单元开始运行。
27.具体的,所述设置单元,用于设定初始最小心跳值、初始最大心跳值、当前心跳值、当前最小心跳值和当前最大心跳值,当前心跳值在所述初始最小心跳值和初始最大心跳值之间取值,和服务端之间建立tcp协议长连接。
28.具体的,所述心跳发送单元,用于在一次心跳时钟的时间内,若接收到服务端的请求,设置单元开始运行。
29.具体的,所述心跳上调单元,用于根据当前心跳值和当前最大心跳值之间的数值关系,确定是否对当前心跳值调整;
30.若对当前心跳值进行调整,采用以下公式计算当前心跳值:
31.currentminh=curenth,
32.curenth=(currentminh+currentmaxh)/2;
33.其中,curenth表示当前心跳值,currentminh表示当前最小心跳值,currentmaxh表示当前最大心跳值。
34.具体的,所述心跳下调单元,用于采用以下公式计算当前心跳值:
35.currentmaxh=curenth,
36.curenth=(currentminh+currentmaxh)/2。
37.有益效果:与现有技术相比,本发明具有如下显著优点:根据通信双方之间的通信信息收发情况和网络环境情况,不断调整心跳间隔时间,实现在不超过nat时间的情况下,
心跳间隔时间不断接近nat时间,避免网络和设备资源的浪费。
附图说明
38.图1为本发明提供的基于tcp协议长连接的心跳间隔调整方法的流程示意图。
具体实施方式
39.下面结合附图对本发明的技术方案作进一步说明。参阅图1,其为本发明提供的基于tcp协议长连接的心跳间隔调整方法的流程示意图。
40.步骤1,以当前心跳值设置心跳时钟,进行计时。
41.本发明实施例中,设定初始最小心跳值、初始最大心跳值、当前心跳值、当前最小心跳值和当前最大心跳值,当前心跳值在所述初始最小心跳值和初始最大心跳值之间取值,客户端和服务端之间建立tcp协议长连接。
42.在具体实施中,长连接,也叫持久连接,在tcp层握手成功后,不立即断开连接,并在此连接的基础上进行多次信息(包括心跳)交互,直至连接的任意一方(客户端或服务端)主动断开连接,此过程称为一次完整的长连接。而保活机制可以在连接的任意一方出现信息交汇障碍时断开连接,避免资源的浪费,所采用的方案是通信连接的一方向另一方发送保活探测报文,发送频率根据心跳时间或者心跳时钟确定。
43.在具体实施中,在国内移动通信环境下,运营商分配给手机终端的ip地址是运营商的内网ip地址,手机连接网络就需要通过运营商的网关进行网络地址转换(network address translation,nat),也即运营商的网关需要维护外网ip、端口到内网ip、端口的对应关系,以确保内网的手机可以和网络服务器进行通讯。国内移动无线网络运营商在链路一段时间没有数据通讯时,会淘汰nat表中的对应项,造成链路中断,因此tcp长连接保活机制所适用的心跳间隔必须小于nat超时时间,以实现链路存在数据通讯而不被淘汰中断,如果超过nat超时时间不进行心跳,tcp长连接链路因运营商淘汰nat表中的对应项而中断,网络服务器和手机之间则断开连接。
44.在具体实施中,由于各个运营商在不同网络类型下的nat时间未知,为了可以让心跳间隔时间不断逼近当前网络环境下的nat时间,避免因多次发送心跳而导致的网络和设备资源的浪费,适用本发明所提出的技术方案。
45.在具体实施中,首先当前心跳值可以从初始最小心跳值和初始最大心跳值之间取值,按照当前心跳值设置心跳时钟,心跳时钟即发送心跳的时间间隔,在之后当前心跳值会根据通信连接情况进行调整,根据当前最小心跳值和当前最大心跳值进行具体数值的调整,不断接近nat超时时间。其中,初始最小心跳值可以取值为60秒,初始最大心跳值可以取值为600秒,当前心跳值可以取值为120秒,当前最小心跳值可以取值为60秒,当前最大心跳值可以取值为600秒,以上心跳值可以取其他值以配合当前所应用的网络环境。
46.步骤2,在一次心跳时钟的时间内,若没有接收到服务端的请求,则在心跳时钟的时间结束时,由客户端向服务端发送心跳,判断是否收到服务端的返回,根据是否返回,进入步骤3或步骤4。
47.本发明实施例中,在一次心跳时钟的时间内,若接收到服务端的请求,返回步骤1。
48.在具体实施中,在心跳时钟的时间内客户端接收到服务端的请求,则tcp链路不会
中断,并且nat超时时间可以重新开始计算,因此进入步骤1,即心跳时钟清零,重新开始心跳时间计时。
49.在具体实施中,如果心跳时钟计时结束,服务端和客户端之间没有信息通讯,则需发送心跳包以保证tcp链路中存在数据,避免nat超时而链路中断。根据是否收到服务端返回的情况,判断此时的心跳时钟所对应的当前心跳值是否需要进行相应的调整。
50.步骤3,若收到服务端的返回,稳定心跳计数增加固定数值,判断稳定心跳计数是否达到预定阈值,若没有达到,则返回步骤1;若已经达到,则稳定心跳计数清零,对当前心跳值进行上调后返回步骤1。
51.在具体实施中,如果收到服务端的返回,已经可以表明当前心跳值是小于nat超时时间的,由于后续涉及到当前心跳值的调整,为了可以进一步明确,避免因其他因素干扰而导致的误调整,设置稳定心跳计数,稳定心跳计数在客户端收到服务端针对心跳进行返回的情况下可以开始计数,增加固定数值,在计数没有达到预定阈值的情况下,返回步骤1;在计数达到预定阈值的情况下,例如固定数值取1,每次收到服务端的返回时稳定心跳计数加1,预定阈值取2,则在稳定心跳计数达到2的时候可以进行稳定心跳计数的清零,对当前心跳值进行上调以接近nat超时时间,然后返回步骤1。
52.本发明实施例中,对当前心跳值进行上调,包括:
53.根据当前心跳值和当前最大心跳值之间的数值关系,确定是否对当前心跳值调整;
54.若对当前心跳值进行调整,采用以下公式计算当前心跳值:
55.currentminh=curenth,
56.curenth=(currentminh+currentmaxh)/2;
57.其中,curenth表示当前心跳值,currentminh表示当前最小心跳值,currentmaxh表示当前最大心跳值。
58.在具体实施中,根据当前心跳值和当前最大心跳值之间的数值关系,可以为当前最大心跳值与当前心跳值之间的差值是否在特定范围内,例如currentmaxh

curenth<=10s,如果在特定范围,表明当前心跳值已经达到稳定状态,十分接近nat超时时间,无需进行调整;如果不在特定范围内,表明当前心跳值还没有达到稳定状态,可以采用二分法重新计算当前心跳值。
59.在具体实施中,采用二分法计算当前心跳值,可以快速接近nat超时时间,相比按照固定值步进的方式,优势在于,接近nat超时时间所需要的计算次数显著减少,与nat超时时间在数值上的接近程度更高,数值上的差距更小。
60.步骤4,若没有收到服务端的返回,判断客户端向服务端发送心跳的次数,若没有达到标准次数,则继续发送心跳,根据是否返回,进入步骤3或重新执行步骤4;若已经达到标准次数,则断开连接。
61.在具体实施中,如没有收到服务端的返回,已经可以表明当前心跳值是大于nat超时时间的,由于后续涉及到当前心跳值的调整,为了可以进一步明确,避免因其他因素干扰而导致的误调整,客户端再次按照心跳时钟发送心跳,如果再次发送心跳收到了服务端的返回,表明上次没有发送心跳没有收到服务端的返回可能是受到了其他因素的干扰,则可以进入步骤3;如果再次发送心跳仍然没有收到服务端的返回,进入步骤4,则可以判断没有
收到心跳返回的次数,如果次数已经达到了标准次数,可以表明当前心跳值是大于nat超时时间,tcp链路已经因为nat超时而中断,此时可以断开连接。
62.步骤5,断开连接后稳定心跳计数清零,对当前心跳值进行下调后返回步骤1。
63.在具体实施中,由于需要对当前心跳值进行调整,则将稳定心跳计数清零。然后对当前心跳值进行下调以接近nat超时时间后,返回步骤1再次通过流程步骤对当前心跳值进行调整,直到当前心跳值稳定,实现接近nat超时时间。
64.本发明实施例中,对当前心跳值进行下调,包括:
65.采用以下公式计算当前心跳值:
66.currentmaxh=curenth,
67.curenth=(currentminh+currentmaxh)/2。
68.在具体实施中,对当前心跳值进行下调同样适用二分法计算进行计算,当前心跳值快速接近nat超时时间。
69.本发明还提供一种基于tcp协议长连接的心跳间隔调整装置,包括:设置单元、心跳发送单元、心跳上调单元、连接断开单元和心跳下调单元,其中:
70.所述设置单元,用于以当前心跳值设置心跳时钟,进行计时;
71.所述心跳发送单元,用于在一次心跳时钟的时间内,若没有接收到服务端的请求,则在心跳时钟的时间结束时,向服务端发送心跳,判断是否收到服务端的返回;
72.所述心跳上调单元,用于若收到服务端的返回,稳定心跳计数增加固定数值,判断稳定心跳计数是否达到预定阈值,若没有达到,则设置单元开始运行;若已经达到,则稳定心跳计数清零,对当前心跳值进行上调后设置单元开始运行;
73.所述连接断开单元,用于若没有收到服务端的返回,判断向服务端发送心跳的次数,若没有达到标准次数,则继续发送心跳,根据是否返回,心跳上调单元开始运行或连接断开单元重新运行;若已经达到标准次数,则断开连接;
74.所述心跳下调单元,用于断开连接后稳定心跳计数清零,对当前心跳值进行下调后设置单元开始运行。
75.本发明实施例中,所述设置单元,用于设定初始最小心跳值、初始最大心跳值、当前心跳值、当前最小心跳值和当前最大心跳值,当前心跳值在所述初始最小心跳值和初始最大心跳值之间取值,和服务端之间建立tcp协议长连接。
76.本发明实施例中,所述心跳发送单元,用于在一次心跳时钟的时间内,若接收到服务端的请求,设置单元开始运行。
77.本发明实施例中,所述心跳上调单元,用于根据当前心跳值和当前最大心跳值之间的数值关系,确定是否对当前心跳值调整;
78.若对当前心跳值进行调整,采用以下公式计算当前心跳值:
79.currentminh=curenth,
80.curenth=(currentminh+currentmaxh)/2;
81.其中,curenth表示当前心跳值,currentminh表示当前最小心跳值,currentmaxh表示当前最大心跳值。
82.本发明实施例中,所述心跳下调单元,用于采用以下公式计算当前心跳值:
83.currentmaxh=curenth,
84.curenth=(currentminh+currentmaxh)/2。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1