发明内容
本说明书实施例第一方面提供了一种http长连接的保活***,包括:所述***包括业务服务器和管控服务器,其中,所述管控服务器用于管控所述业务服务器中的第一线程池;
所述业务服务器用于接收多个业务请求,响应所述多个业务请求,在所述第一线程池中创建与每个业务请求对应的线程,通过与每个业务请求对应的线程创建出与每个业务请求对应的http连接进行数据交换,所述http连接包括http长连接和http短连接;
所述管控服务器,用于实时获取所述第一线程池中创建出http长连接对应的当前保活线程,并为所述当前保活线程中的每个保活线程分配一个随机数;根据每个保活线程分配的随机数和已获取的基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
本说明书实施例第二方面提供了一种http长连接的保活方法,应用于管控服务器中,包括:
实时获取在业务服务器中的第一线程池中创建出http长连接对应的当前保活线程,并为所述当前保活线程中的每个保活线程分配一个随机数;
根据每个保活线程分配的随机数和已获取的基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;
控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
本说明书实施例第三方面还提供了一种管控服务器,包括:
保活线程获取单元,用于实时获取在业务服务器中的第一线程池中创建出http长连接对应的当前保活线程;
随机数分配单元,用于为所述当前保活线程中的每个保活线程分配一个随机数;
目标心跳间隔时间获取单元,用于根据每个保活线程分配的随机数和已获取的基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;
心跳检测单元,用于控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
本说明书实施例第四方面还提供了一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述http长连接的保活方法的步骤。
本说明书实施例第五方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时上述http长连接的保活方法的步骤。
本说明书实施例的有益效果如下:
基于上述技术方案,管控服务器控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测,即可以确定管控服务器对心跳检测对应的线程进行管控,而管控服务器还管控业务服务器中的第一线程池中线程,使得管控服务器统一对业务服务器中的线程进行统一管控,在线程进行统一管控的情况下,能够有效降低业务请求和心跳请求对应同一个http连接出现的概率,从而能够降低数据包错乱的概率,提高租用、可用和过期的http连接正常运转的概率。
以及,在所述当前保活线程为多个线程时,所述管控服务器还用于为所述当前保活线程中的每个保活线程分配一个随机数,再根据每个保活线程分配的随机数和已获取的基准心跳间隔时间可以使得多个保活线程对应的目标心跳间隔时间的取值不同,促使多个保活线程间隔不同的时间进行心跳检测,从而能够有效降低所述多个保活线程的心跳检测同时过期出现的概率,还能够适用于占据保活连接的场景并适用于高并发场景。
具体实施方式
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本说明书实施例的技术方案做详细的说明,应当理解本说明书实施例以及实施例中的具体特征是对本说明书实施例技术方案的详细的说明,而不是对本说明书技术方案的限定,在不冲突的情况下,本说明书实施例以及实施例中的技术特征可以相互组合。
第一方面,如图1所示,本说明书实施例提供一种HTTP长连接的通用保活***,包括:业务服务器100和管控服务器200,其中,管控服务器200用于管控业务服务器100中的第一线程池;
业务服务器100用于接收多个业务请求,响应所述多个业务请求,在所述第一线程池中创建与每个业务请求对应的线程,通过与每个业务请求对应的线程创建出与每个业务请求对应的http连接进行数据交换,所述http连接包括http长连接和http短连接;
管控服务器200,用于实时获取所述第一线程池中创建出http长连接对应的当前保活线程,并为所述当前保活线程中的每个保活线程分配一个随机数;根据每个保活线程分配的随机数和已获取的基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
本说明书实施例中,管控服务器200监测到业务服务器100接收到所述多个业务请求中的首个业务请求时,用于获取所述首个业务请求的实时性参数,并初始化心跳配置参数,其中,所述心跳配置参数包括所述第二线程池中的线程数量、最大线程保活数和心跳超时时间等参数,构建本地缓存。如此,使得业务服务器100首先使用所述初始化心跳配置参数进行运行,然后管控服务器200根据运行时环境自适应的调整所述初始化心跳配置参数。
本说明书实施例中,所述http长连接指的是在传输层使用TCP协议,在数据传输完成后保持TCP连接不断开,等待在同域名/地址下继续使用这个通道进行数据传输;所述http短连接指的是在传输层使用TCP协议,在数据传输完成后连接断开。
本说明书实施例中,所述业务请求可以包括支付请求、退款请求和提现请求等,所述业务请求为http请求,其中,所述支付请求的实时性参数
本说明书实施例中,管控服务器200获取所述基准心跳间隔时间,具体包括:通过探测法获取基准心跳间隔时间。如此,可以首先获取所述基准心跳间隔时间的心跳取值范围,然后从所述心跳取值范围中寻找首个探测失败时间点;再根据所述首个探测失败时间点,利用二分法获取最佳时间点,并将所述最佳时间点作为所述基准心跳间隔时间。
具体来讲,管控服务器200在获取所述基准心跳间隔时间时,所述心跳取值范围可以是预先设置的,所述心跳取值范围可以为[1,Tmax],其中,Tmax为大于2的整数,且所述基准心跳间隔时间对应的单位为秒(s)。当然,所述基准心跳间隔时间对应的单位可以为毫秒等,本说明书实施例不作具体限制。
具体地,管控服务器200在获取到所述心跳取值范围之后,可以按照指数法从所述心跳取值范围中寻找首个探测失败时间点。
例如,在所述心跳取值范围为[1,Tmax]时,若按照所述指数法探测轨迹为2s、4s、8s、16s和32s,且探测到首个探测失败时间点为32s;探测失败则停止,否则直到Tmax停止;然后按照二分法获取最佳时间点,由于所述首个探测失败时间点为32s,则获取在所述首个探测失败时间点之前的探测时间点为16s,则在[16,31]之间继续选择探测时间,若探测时间点为24s和28s(假设28探测失败);然后在[24,27]之间继续选择探测时间,若选择的探测时间点为26s;然后在[24,25]之间继续探测,若选择的探测时间点为25s(假设25探测失败),则获取到最佳时间点为24s,即所述基准心跳间隔时间为24s;若25s未探测失败,则获取到最佳时间点为25s,即所述基准心跳间隔时间为25s。
本说明书实施例中,管控服务器200,用于获取当前保活线程,并为所述当前保活线程中的每个保活线程分配一个随机数;根据每个保活线程分配的随机数和所述基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
具体来讲,管控服务器200为所述当前保活线程中的每个保活线程分配一个随机数时,可以获取所述当前保活线程的保活数量,根据所述保活数量确定随机数的随机取值范围;在所述随机取值范围内为每个保活线程分配一个随机数,得到每个保活线程对应的随机数。
本说明书实施例中,所述保活数量可以用m表示,其中,m为不小于1的整数,则根据m,确定所述随机取值范围为[0,m+1],即所述随机取值范围最小为0且最大为m+1,然后在[0,m+1]内为每个保活线程分配一个随机数r。
本说明书实施例中,管控服务器200用于根据每个保活线程分配的随机数和所述基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间时,可以将每个保活线程分配的随机数和所述基准心跳间隔时间之和作为该保活线程对应的目标心跳间隔时间;也可以将每个保活线程分配的随机数和所述基准心跳间隔时间的乘积作为该保活线程对应的目标心跳间隔时间等。
本说明书实施例中,所述基准心跳间隔时间可以用T0表示,若在[0,m+1]内为某个保活线程分配了一个随机数r1,则该保活线程对应的目标心跳间隔时间为T0+r1,当然,也可以为T0×r1。
例如,若所述当前保活线程为线程a1、a2、a3、a4、a5和a6,此时可知m=6,则确定所述随机取值范围为[0,7],若在[0,m+1]内为a1分配的一个随机数为2,则确定a1对应的目标心跳间隔时间为T0+2;相应地,若在[0,7]内为a2分配的一个随机数为4,则确定a2对应的目标心跳间隔时间为T0+4;若在[0,7]内为a3分配的一个随机数为0,则确定a3对应的目标心跳间隔时间为T0+0;若在[0,7]内为a4分配的一个随机数为7,则确定a4对应的目标心跳间隔时间为T0+7;若在[0,7]内为a5分配的一个随机数为6,则确定a5对应的目标心跳间隔时间为T0+6;若在[0,7]内为a6分配的一个随机数为3,则确定a1对应的目标心跳间隔时间为T0+3。
如此,在当前保活线程为多个线程时,通过此种方式可以使得多个保活线程对应的目标心跳间隔时间的取值不同,从而使得多个保活线程间隔不同的时间进行心跳检测,从而能够有效降低所述多个保活线程的心跳检测同时过期出现的概率,还能够适用于占据保活连接的场景并适用于高并发场景。
本说明书实施例中,管控服务器200用于控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测时,获取在业务服务器100的第二线程池中为每个保活线程生成对应的心跳请求,利用每个保活线程对应的心跳请求控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。其中,管控服务器200用于管控所述第二线程池。
例如,业务服务器100中创建有线程池b1和线程池b2,在接收到每个业务请求之后,在b1创建与每个业务请求对应的线程,以及在b2中创建与每个心跳请求对应的线程,b1中的线程用于创建http连接,而b2中的线程用于执行心跳检测。
如此,使得管控服务器200统一管控业务服务器100中的所述第一线程池和所述第二线程池,所述第一线程池中的线程创建的http连接而b2中的线程用于执行心跳检测而不会创建http连接,如此,能够有效降低业务请求和心跳请求对应同一个http连接出现的概率,从而能够降低数据包错乱的概率,提高租用、可用和过期的http连接正常运转的概率。
本说明书实施例中,管控服务器200,用于获取当前请求量和当前网络环境参数,根据所述当前请求量和所述当前网络环境参数,确定出能够工作的当前保活线程总量。
本说明书实施例中,所述网络环境参数包括网络质量、网络状态、NAT超时和路由跳转异常等参数。管控服务器200可以通过监测或查询的方式获取到所述当前请求量和所述当前网络环境参数,其中,所述当前请求量的单位可以每秒的请求数量或每分钟的请求数量等。
本说明书实施例中,管控服务器200用于在获取所述当前请求量和所述当前网络环境参数之后,首先检测所述当前网络环境参数是否达到预设网络环境参数,若达到所述预设网络环境参数,则根据所述当前请求量,确定出当前能够工作的当前保活线程总量;若未达到所述预设网络环境参数,则从所述第一线程池获取当前保活线程数作为所述当前保活线程总量。
本说明书实施例中,管控服务器200用于根据所述当前请求量,确定出当前能够工作的当前保活线程总量时,还需从所述第一线程池中获取当前保活线程数,然后将所述当前保活线程数与所述当前请求量进行比较,得到比较结果;检测所述比较结果是否超过设定阈值;若所述比较结果超过所述设定阈值,则确定出增加的保活线程数,根据所述当前保活线程数和所述增加的保活线程数,确定出所述保活线程数总量,其中,所述当前保活线程总量不超过最大保活线程数。
本说明书实施例中,所述最大保活线程数可以由***或人工进行设定,也可以根据***的实际情况进行设定;进一步地,所述设定阈值可以由***或人工进行设定。
本说明书实施例中,管控服务器200用于确定出增加的保活线程数时,可以根据所述设定阈值和所述当前保活线程数,确定出所述增加的保活线程数;也可以设置一个增加值作为所述增加的保活线程数,所述增加值可以是一个固定值或可变化的值;在所述增加值为固定值时,所述增加值可以固定为20或30等不小于1的整数;所述增加值是一个可变化的值时,所述增加值可以在预设取值范围内进行变动,所述预设取值范围中的最小值为不小于1的整数,以及其中的最大值小于所述最大保活线程数。
本说明书实施例中,管控服务器200用于根据所述设定阈值和所述当前保活线程数,确定出所述增加的保活线程数时,可以将所述设定阈值和所述当前保活线程数之和与预设百分数的乘积作为所述增加的保活线程数。
例如,若所述当前保活线程数用L表示,所述设定阈值用P表示,所述当前请求量用Q表示,首先将L和Q进行比较,得到比较结果为L-Q;然后判断(L-Q)是否大于P,若(L-Q)>P,则确定出所述增加的保活线程数为(L+P)×所述预设百分数,此时,确定出所述当前保活线程总量为L+(L+P)×所述预设百分数。
如此,使得管控服务器200能够根据所述当前请求量和所述当前网络环境参数,自动调整所述当前保活线程总量,提高***的自动调整能力。
第二方面,本说明书实施例提供了一种http长连接的保活方法,应用于管控服务器中,如图2所示,包括:
S202、实时获取在业务服务器中的第一线程池中创建出http长连接对应的当前保活线程,并为所述当前保活线程中的每个保活线程分配一个随机数;
S204、根据每个保活线程分配的随机数和已获取的基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;
S206、控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
在一种可选实施方式中,所述获取所述基准心跳间隔时间的步骤,具体包括:
通过探测法获取基准心跳间隔时间。
在一种可选实施方式中,所述通过探测法获取基准心跳间隔时间,具体包括:
获取所述基准心跳间隔时间的心跳取值范围;
从所述心跳取值范围中寻找首个探测失败时间点;
根据所述首个探测失败时间点,利用二分法获取最佳时间点,并将所述最佳时间点作为所述基准心跳间隔时间。
在一种可选实施方式中,所述为所述当前保活线程中的每个保活线程分配一个随机数,具体包括:
获取所述当前保活线程的保活数量,并根据所述保活数量确定随机数的随机取值范围;在所述随机取值范围内为每个保活线程分配一个随机数,得到每个保活线程对应的随机数。
在一种可选实施方式中,所述控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测,具体包括:
获取在所述业务服务器的第二线程池中为每个保活线程生成对应的心跳请求,利用每个保活线程对应的心跳请求控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
在一种可选实施方式中,所述方法还包括:
获取当前请求量和当前网络环境参数;
根据所述当前请求量和所述当前网络环境参数,确定出能够工作的当前保活线程总量。
在一种可选实施方式中,所述根据所述当前请求量和所述当前网络环境参数,确定出能够工作的当前保活线程总量,具体包括:
检测所述当前网络环境参数是否达到预设网络环境参数;
若达到所述预设网络环境参数,则根据所述当前请求量,确定出当前能够工作的当前保活线程总量;若未达到所述预设网络环境参数,则从所述第一线程池获取当前保活线程数作为所述当前保活线程总量。
在一种可选实施方式中,所述根据所述当前请求量,确定出当前能够工作的当前保活线程总量,具体包括:
从所述第一线程池中获取当前保活线程数;
将所述当前保活线程数与所述当前请求量进行比较,得到比较结果;
检测所述比较结果是否超过设定阈值;
若所述比较结果超过所述设定阈值,则确定出增加的保活线程数,根据所述当前保活线程数和所述增加的保活线程数,确定出所述保活线程数总量,其中,所述当前保活线程总量不超过最大保活线程数。
第三方面,基于与第二方面提供的方法相同的技术构思,本说明书实施例提供了一种管控服务器,如图3所示,包括:
保活线程获取单元301,用于实时获取在业务服务器中的第一线程池中创建出http长连接对应的当前保活线程;
随机数分配单元302,用于为所述当前保活线程中的每个保活线程分配一个随机数;
目标心跳间隔时间获取单元303,用于根据每个保活线程分配的随机数和已获取的基准心跳间隔时间,获取每个保活线程对应的目标心跳间隔时间;
心跳检测单元304,用于控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
在一种可选实施方式中,所述管控服务器还包括:
基准心跳间隔时间获取单元,用于通过探测法获取基准心跳间隔时间。
在一种可选实施方式中,所述基准心跳间隔时间获取单元,具体用于获取所述基准心跳间隔时间的心跳取值范围;从所述心跳取值范围中寻找首个探测失败时间点;根据所述首个探测失败时间点,利用二分法获取最佳时间点,并将所述最佳时间点作为所述基准心跳间隔时间。
在一种可选实施方式中,随机数分配单元302,具体用于获取所述当前保活线程的保活数量,并根据所述保活数量确定随机数的随机取值范围;在所述随机取值范围内为每个保活线程分配一个随机数,得到每个保活线程对应的随机数。
在一种可选实施方式中,心跳检测单元304,具体用于获取在所述业务服务器的第二线程池中为每个保活线程生成对应的心跳请求,利用每个保活线程对应的心跳请求控制每个保活线程按照对应的目标心跳间隔时间进行心跳检测。
在一种可选实施方式中,所述管控服务器还包括:
信息获取单元,用于获取当前请求量和当前网络环境参数;
当前保活线程总量获取单元,用于根据所述当前请求量和所述当前网络环境参数,确定出能够工作的当前保活线程总量。
在一种可选实施方式中,所述当前保活线程总量获取单元,具体用于检测所述当前网络环境参数是否达到预设网络环境参数;若达到所述预设网络环境参数,则根据所述当前请求量,确定出当前能够工作的当前保活线程总量;若未达到所述预设网络环境参数,则从所述第一线程池获取当前保活线程数作为所述当前保活线程总量。
在一种可选实施方式中,所述当前保活线程总量获取单元,具体用于从所述第一线程池中获取当前保活线程数;将所述当前保活线程数与所述当前请求量进行比较,得到比较结果;检测所述比较结果是否超过设定阈值;若所述比较结果超过所述设定阈值,则确定出增加的保活线程数,根据所述当前保活线程数和所述增加的保活线程数,确定出所述保活线程数总量,其中,所述当前保活线程总量不超过最大保活线程数。
第四方面,基于与前述实施例中http长连接的保活方法同样的发明构思,本说明书实施例还提供一种移动终端,如图4所示,包括存储器404、处理器402及存储在存储器404上并可在处理器402上运行的计算机程序,所述处理器402执行所述程序时实现前文所述http长连接的保活方法的任一方法的步骤。
其中,在图4中,总线架构(用总线400来代表),总线400可以包括任意数量的互联的总线和桥,总线400将包括由处理器402代表的一个或多个处理器和存储器404代表的存储器的各种电路连接在一起。总线400还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口405在总线400和接收器401和发送器403之间提供接口。接收器401和发送器403可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器402负责管理总线400和通常的处理,而存储器404可以被用于存储处理器402在执行操作时所使用的数据。
第五方面,基于与前述实施例中http长连接的保活方法的发明构思,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文所述http长连接的保活方法的任一方法的步骤。
本说明书是参照根据本说明书实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的设备。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令设备的制造品,该指令设备实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本说明书的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本说明书范围的所有变更和修改。
显然,本领域的技术人员可以对本说明书进行各种改动和变型而不脱离本说明书的精神和范围。这样,倘若本说明书的这些修改和变型属于本说明书权利要求及其等同技术的范围之内,则本说明书也意图包含这些改动和变型在内。