一种用于建立长连接的方法和设备转让专利

申请号 : CN201610305353.1

文献号 : CN107360632B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 鲍承伟万玉权胡靖

申请人 : 上海连尚网络科技有限公司

摘要 :

本申请的目的是提供了一种用于建立长连接的方法和设备,通过禁用服务设备中的连接保持操作,降低了服务设备维持长连接的资源开销,以支持更多的并发长连接;接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而能够支持更多的并发长连接。

权利要求 :

1.一种在服务设备端用于建立长连接的方法,其中,所述方法包括:禁用服务设备中的连接保持操作;

接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;

接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。

2.根据权利要求1所述的方法,其中,所述方法还包括:获取所述服务设备的配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。

3.根据权利要求1所述的方法,其中,所述方法还包括:若成功建立所述长连接,则保存所述服务设备。

4.一种在客户设备端用于建立长连接的方法,其中,所述方法包括:向目标服务设备发送长连接请求,以使所述目标服务设备基于所述长连接请求与所述客户设备建立长连接;

若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至与所述客户设备之间的所述长连接建立成功;

其中,所述方法还包括:

获取心跳时间间隔,基于所述心跳时间间隔向与所述客户设备成功建立所述长连接时对应的服务设备发送心跳包,以使所述服务设备基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态;

其中,所述目标服务设备、所述可用服务器及所述与所述客户设备成功建立所述长连接时对应的服务设备中均禁用连接保持操作。

5.根据权利要求4所述的方法,其中,所述向目标服务设备发送长连接请求,以建立长连接包括:从网络分配设备获取对应的目标服务设备及备用的可用服务设备,并在所述客户设备上本地存储所述备用的可用服务设备;

向所述目标服务设备发送长连接请求,以建立所述长连接。

6.根据权利要求5所述的方法,其中,向所述目标服务设备发送长连接请求,以建立所述长连接包括:向所述目标服务设备发送长连接请求,并接收来自所述目标服务设备基于所述长连接请求发送的对应响应信息;

基于所述对应响应信息与所述目标服务设备建立所述长连接。

7.根据权利要求4所述的方法,其中,所述方法还包括:若所述长连接建立成功,则将所述目标服务设备进行本地保存。

8.根据权利要求4所述的方法,其中,若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功包括:若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求;

若与本地存储的所有所述可用服务设备建立所述长连接失败,则向网络设备发送设备请求,以获取所述网络设备所存储的可用服务设备的相关信息;

向获取的所述网络设备存储的所述可用服务设备发送所述长连接请求,直至所述长连接建立成功。

9.根据权利要求4所述的方法,其中,所述方法还包括:获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包。

10.根据权利要求9所述的方法,其中,所述获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包包括:若所述长连接处于连接状态,则获取所述长连接的网络环境信息;

基于所述网络环境信息,确定所述心跳时间间隔;

基于所述心跳时间间隔向所述目标服务设备发送所述心跳包,以保持所述长连接。

11.根据权利要求10所述的方法,其中,所述网络环境信息包括以下至少任一项:网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息。

12.根据权利要求11所述的方法,其中,所述基于所述网络环境信息,确定所述心跳时间间隔包括:根据所述网络连接信息,确定所述心跳时间间隔;或,根据所述地理距离位置信息,确定所述心跳时间间隔;或,根据前一次所述历史心跳间隔,确定所述心跳时间间隔;或,根据与目标客户设备相关的所述运营商信息,确定所述心跳时间间隔。

13.根据权利要求9所述的方法,其中,所述获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包还包括:获取心跳响应时间间隔,在所述心跳响应时间间隔内,未收到来自所述目标服务设备基于所述心跳包发送的心跳响应信息或收到与所述长连接对应的断开事件,则所述长连接处于断开状态。

14.一种用于建立长连接的服务设备,其中,所述服务设备包括:禁用装置,用于禁用服务设备中的连接保持操作;

请求接收装置,用于接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;

连接保持装置,用于接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。

15.根据权利要求14所述的服务设备,其中,所述服务设备还包括:设置装置,用于获取所述服务设备的配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。

16.根据权利要求14所述的服务设备,其中,所述服务设备还包括:保存装置,用于若成功建立所述长连接,则保存所述服务设备。

17.一种用于建立长连接的客户设备,其中,所述客户设备包括:请求发送装置,用于向目标服务设备发送长连接请求,以使所述目标服务设备基于所述长连接请求与所述客户设备建立长连接;

连接重试装置,用于所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至与所述客户设备之间的所述长连接建立成功。

18.根据权利要求17所述的客户设备,其中,所述请求发送装置包括:设备获取单元,用于从网络分配设备获取对应的目标服务设备及备用的可用服务设备,并在所述客户设备上本地存储所述备用的可用服务设备;

请求发送单元,用于向所述目标服务设备发送长连接请求,以建立所述长连接;

所述客户设备还包括:

心跳包发送装置,用于获取心跳时间间隔,基于所述心跳时间间隔向与所述客户设备成功建立所述长连接时对应的服务设备发送心跳包,以使所述服务设备基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态;

其中,所述目标服务设备、所述可用服务器及所述与所述客户设备成功建立所述长连接时对应的服务设备中均禁用连接保持操作。

19.根据权利要求18所述的客户设备,其中,所述请求发送单元包括:请求发送子单元,用于向所述目标服务设备发送长连接请求,并接收来自所述目标服务设备基于所述长连接请求发送的对应响应信息;

连接建立子单元,用于基于所述对应响应信息与所述目标服务设备建立所述长连接。

20.根据权利要求17所述的客户设备,其中,所述客户设备还包括:本地保存装置,用于若所述长连接建立成功,则将所述目标服务设备进行本地保存。

21.根据权利要求17所述的客户设备,其中,所述连接重试装置包括:本地设备重试单元,用于若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求;

重试设备获取单元,用于若与本地存储的所有所述可用服务设备建立所述长连接失败,则向网络设备发送设备请求,以获取所述网络设备所存储的可用服务设备的相关信息;

重试连接建立单元,用于向获取的所述网络设备存储的所述可用服务设备发送所述长连接请求,直至所述长连接建立成功。

22.根据权利要求17所述的客户设备,其中,所述客户设备还包括:心跳包发送装置,用于获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包。

23.根据权利要求22所述的客户设备,其中,所述心跳包发送装置包括:信息获取单元,用于若所述长连接处于连接状态,则获取所述长连接的网络环境信息;

确定单元,用于基于所述网络环境信息,确定所述心跳时间间隔;

心跳包发送单元,用于基于所述心跳时间间隔向所述目标服务设备发送所述心跳包,以保持所述长连接。

24.根据权利要求23所述的客户设备,其中,所述网络环境信息包括以下至少任一项:网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息。

25.根据权利要求24所述的客户设备,其中,所述确定单元用于:根据所述网络连接信息,确定所述心跳时间间隔;或,根据所述地理距离位置信息,确定所述心跳时间间隔;或,根据前一次所述历史心跳间隔,确定所述心跳时间间隔;或,根据与目标客户设备相关的所述运营商信息,确定所述心跳时间间隔。

26.根据权利要求22所述的客户设备,其中,所述心跳包发送装置还包括:连接断开单元,用于获取心跳响应时间间隔,在所述心跳响应时间间隔内,未收到来自所述目标服务设备基于所述心跳包发送的心跳响应信息或收到与所述长连接对应的断开事件,则所述长连接处于断开状态。

说明书 :

一种用于建立长连接的方法和设备

技术领域

[0001] 本申请涉及计算机领域,尤其涉及一种用于建立长连接的技术。

背景技术

[0002] 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。长连接为连接中的一种,通常用于操作频繁、点对点的通讯,如客户设备端与服务设备端之间的即时数据通信。长连接只需建立一次连接,且在连接成功后,一般会维持较长时间,连接双方会利用该连接进行多次通信,每次通信后该连接都不会断开,从而避免由于频繁的建立连接而造成资源的浪费。
[0003] 现有技术中,客户设备与服务设备之间发起建立长连接后,使得客户设备与服务设备之间建立长连接,实现客户设备与服务设备之间的数据通信。为了保证所述长连接能够进行多次数据传输,则依靠服务设备端的keepalive(保持连接操作)来保持与客户设备端的长连接,由于服务设备端不仅要提供与客户设备端建立并发的长连接的资源开销,还要提供保持与客户设备之间的长连接的资源开销,造成服务设备端的资源开销过大,导致服务设备端无法在同一时间段内容纳更多的并发的长连接。又由于服务设备端在长连接的保持过程中,如果较长时间没有数据包通信,网络运营商或者网络中转设备会将当前连接变为不可用状态,导致连接客户设备端和服务设备端的任意一方想再次进行通信时无法成功发送和接收数据包,造成长连接的僵死状态,导致没能保持该长连接。
[0004] 因此,现有技术中通过服务设备来保持与客户设备之间的长连接,造成服务设备的资源开销过大,导致无法容纳大量的并发的长连接,同时由于长连接长时间没有数据包通信,造成长连接处于僵死状态,导致没能保持长连接。

发明内容

[0005] 本申请的目的是提供一种用于建立长连接的方法和设备,以解决现有技术中通过服务设备来保持与客户设备之间的长连接,造成服务设备的资源开销过大,导致无法容纳大量的并发的长连接,同时由于长连接长时间没有数据包通信,造成长连接处于僵死状态,导致没能保持长连接的问题。
[0006] 根据本申请的一个方面,提供了一种在服务设备端用于建立长连接的方法,包括:
[0007] 禁用服务设备中的连接保持操作;
[0008] 接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;
[0009] 接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。
[0010] 根据本申请的另一个方面,还提供了一种在客户设备端用于建立长连接的方法,包括:
[0011] 向目标服务设备发送长连接请求,以建立长连接;
[0012] 若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功。
[0013] 根据本申请的另一方面,还提供了一种用于建立长连接的服务设备,包括:
[0014] 禁用装置,用于禁用服务设备中的连接保持操作;
[0015] 请求接收装置,用于接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;
[0016] 连接保持装置,用于接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。
[0017] 根据本申请的另一方面,还提供了一种用于建立长连接的客户设备,包括:
[0018] 请求发送装置,用于向目标服务设备发送长连接请求,以建立长连接;
[0019] 连接重试装置,用于所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功。
[0020] 与现有技术相比,本申请提供了一种用于建立长连接的方法和服务设备,通过禁用服务设备中的连接保持操作,降低了服务设备维持长连接的资源开销,以支持更多的并发长连接;接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而能够支持更多的并发长连接。
[0021] 进一步地,本申请的另一个方面还提供了一种用于建立长连接的方法和客户设备,通过向目标服务设备发送长连接请求,以建立长连接;所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的服务设备建立并保持的长连接数量增加,保证了服务设备能够支持更多的并发长连接。

附图说明

[0022] 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0023] 图1示出根据本申请一个方面的一种在服务设备端用于建立长连接的方法流程示意图;
[0024] 图2示出根据本申请一个方面的一个优选实施例的一种在服务设备端用于建立长连接的方法流程示意图;
[0025] 图3示出根据本申请一个方面的一种在客户设备端用于建立长连接的方法流程示意图;
[0026] 图4示出根据本申请一个方面的一个优选实施例的一种在客户设备端用于建立长连接的方法流程示意图;
[0027] 图5示出根据本申请一个方面的一种用于建立长连接的系统流程示意图;
[0028] 图6示出根据本申请一个方面的一种用于建立长连接的服务设备的结构示意图;
[0029] 图7示出根据本申请一个方面的一个优选实施例的一种用于建立长连接的服务设备的结构示意图;
[0030] 图8示出根据本申请一个方面的一种用于建立长连接的客户设备的结构示意图;
[0031] 图9示出根据本申请一个方面的一个优选实施例的一种用于建立长连接的客户设备的结构示意图;
[0032] 图10示出根据本申请一个方面的一种用于建立长连接的系统设备的交互示意图。
[0033] 附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

[0034] 下面结合附图对本申请作进一步详细描述。
[0035] 图1示出根据本申请一个方面的一种在服务设备端用于建立长连接的方法流程示意图。该方法包括步骤S11、步骤S12和步骤S13。其中,所述步骤S11禁用服务设备中的连接保持操作;所述步骤S12接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;所述步骤S13接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。
[0036] 在本申请的实施例中,通过禁用服务设备中的连接保持操作,克服了现有技术中通过服务设备端的keepalive(连接保持)操作来保持与客户设备的长连接的技术偏见,降低了服务设备维持长连接的资源开销,以支持更多的并发长连接;接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;在长连接建立成功后,接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而使得服务设备能够支持更多的并发长连接。
[0037] 需要说明的是,本申请的所有实施例的实现是基于node js(一种直译式脚本语言中的运行环境)语言,其中所述node js语言是单线程的,在不新增额外线程的情况下,依然可以对事件进行并行处理,并通过事件轮询(event loop)处理机制来实现并行操作。当然,其他现有的或今后可能出现的能够实现本申请的所有实施例的语言如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0038] 在本申请的所有实施例中,采用基于node js语言的服务设备,使得与客户设备建立的每个长连接具有单线程、事件轮询处理机制,从而可以从一定程度上支持更多的并发长连接。
[0039] 在本申请的实施例中,所述长连接建立成功后,所述步骤S13接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而使得服务设备能够支持更多的并发长连接。
[0040] 在本申请的实施例中,在所述步骤S13中,由于在规定时间内,若服务设备没有基于所述心跳包返回心跳响应信息,则服务设备会接收来自所述客户设备的再次发送的心跳包,直至接收来自所述客户设备的预设次数的心跳包,若在所述预设次数内接收到心跳包后,服务设备都没有基于所述心跳包向所述客户设备发送心跳响应信息,则表示客户设备与用户设备之间的长连接断开。为了降低服务设备在每个长连接上的资源开销,在所述步骤S13中,接收来自所述客户设备发送的心跳包,在预设次数范围内,基于一个客户设备的每n个心跳包向所述客户设备发送一次心跳响应信息或者忽略所有的心跳包,不仅能保持所述长连接的连接状态,还尽可能的降低了服务设备在每个长连接上的资源开销,进而支持更多的并发长连接。
[0041] 进一步地,所述方法还包括步骤S14,如图2所示,其中,图2示出根据本申请一个方面的一个优选实施例的一种在服务设备端用于建立长连接的方法流程示意图。其中,所述步骤S14包括:获取所述服务设备的配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。
[0042] 在所述步骤S14中,获取服务设备的配置信息,其中,所述配置信息可以是包括但不限于是包括系统配置信息、设备硬件配置信息以及设备软件配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。在本申请的一个优选实施例中,基于所述配置信息最大化设置所述长连接句柄数阈值,使得所述服务设备在同一时间段内能够连接并保持更多的并发长连接。当然,上述基于所述配置信息最大化设置所述服务设备的长连接句柄数阈值仅为本申请一个方面的优选实施例,其他,其他现有的或今后可能出现的能够实现最大化设置所述服务设备的句柄数阈值的配置信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0043] 进一步地,所述方法还包括步骤S15,如图2所示。其中,所述步骤S15包括:若成功建立所述长连接,则保存所述服务设备。
[0044] 在所述步骤S15中,若与客户设备成功建立所述长连接,则将与客户设备对应建立长连接的所述服务设备保存于网络设备中,以供其他客户设备与所述服务设备建立长连接,从而使得所述服务设备能建立并保持更多的长连接。
[0045] 在本申请的实施例中,基于node js语言的服务设备,使得能够与客户设备建立的每个长连接具有单线程、事件轮询处理机制,同时禁用服务设备中的连接保持操作;并接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;接着接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,使得通过上述基于node js语言的服务设备、禁用服务设备中的连接保持操作(keepalive)、设置所述服务设备的长连接句柄数阈值以及发送心跳包过程中的网络质量等因素共同作用,以使所述服务设备能够在同一时间段内能够连接并保持更多的并发长连接。
[0046] 图3示出根据本申请一个方面的一种在客户设备端用于建立长连接的方法流程示意图。该方法包括步骤S21和步骤S22,其中,所述步骤S21向目标服务设备发送长连接请求,以建立长连接;所述步骤S22若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功。
[0047] 在本申请的实施例中,所述步骤S21通过向目标服务设备发送长连接请求,以建立长连接;所述步骤S22若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的所述可用服务设备建立并保持的长连接数量增加,保证了所述可用服务设备能够支持更多的并发长连接。
[0048] 例如,在所述步骤S21中,所述客户设备A向所述目标服务设备B发送所述长连接请求,以建立长连接;接着在所述步骤S22中,若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,其中,本地存储的可用服务设备有{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G},则逐个地向本地保存的对应所述可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G}发送所述长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的所述可用服务设备建立并保持的长连接数量增加,保证了所述可用服务设备能够支持更多的并发长连接。
[0049] 需要说明的是,所述可用服务设备可以是包括但不限于包括与所述客户设备建立过连接的且处于可用状态下的可用服务设备及存储于本地的与所述客户设备建立长连接的候选服务设备中的可用服务设备。当然,其他现有的或今后可能出现的所述可用服务设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0050] 进一步地,所述步骤S21包括向目标服务设备发送长连接请求,以建立长连接;具体地,所述步骤S21包括:步骤S211(未示出)和步骤S212(未示出),其中,所述步骤S211(未示出)从网络分配设备获取对应的目标服务设备及备用的可用服务设备,并在所述客户设备上本地存储所述备用的可用服务设备;所述步骤S212(未示出)向所述目标服务设备发送长连接请求,以建立所述长连接。
[0051] 需要说明的是,所述网络分配设备可以是包括但不限于包括本地的网络分配设备或云端的网络分配设备。当然,其他现有的或今后可能出现的所述网络分配设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0052] 接着在本申请的上述实施例,在所述步骤S211(未示出)中,所述客户设备A从所述网络分配设备获取对应的目标服务设备B以及本地存储的备用的可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G},并在所述客户设备A中本地存储所述备用的可用服务设备;接着在所述步骤S212(未示出),所述客户设备A向所述目标服务设备B发送长连接请求,以在所述客户设备A与所述目标服务设备B之间建立所述长连接。
[0053] 进一步地,所述步骤S212(未示出)向所述目标服务设备发送长连接请求,以建立所述长连接包括:向所述目标服务设备发送长连接请求,并接收来自所述目标服务设备基于所述长连接请求发送的对应响应信息;基于所述对应响应信息与所述目标服务设备建立所述长连接。
[0054] 需要说明的是,所述对应响应信息可以是包括但不限于包括允许进行长连接建立的数据包,允许进行长连接建立的空数据包及没有报文的报头等。当然,其他现有的或今后可能出现的所述对应响应信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0055] 接着本申请的上述实施例,在所述步骤S212(未示出)中所述客户设备A向所述目标服务设备B发送长连接请求,并接收来自所述目标服务设备B基于所述长连接请求发送的对应响应信息;基于所述对应响应信息与所述目标服务设备B建立所述长连接。
[0056] 进一步地,所述方法还包括步骤S23,如图4所示,其中,图4示出根据本申请一个方面的一个优选实施例的一种在客户设备端用于建立长连接的方法流程示意图。其中,所述步骤S23包括:若所述长连接建立成功,则将所述目标服务设备进行本地保存。
[0057] 接着本申请的上述实施例,在所述步骤S23中,若所述客户设备A与所述目标服务设备B之间的所述长连接建立成功,则将所述目标服务设备B进行本地保存,以待其他的客户设备与其对对应的所述目标服务设备建立所述长连接失败时,向本地保存的所述目标服务设备B发送长连接请求并建立所述长连接,使得所述目标服务设备能够支持更多的并发长连接。
[0058] 进一步地,所述步骤S22包括步骤S221(未示出)、步骤S222(未示出)和步骤S223(未示出),其中,所述步骤S221(未示出)若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求;所述步骤S222(未示出)若与本地存储的所有所述可用服务设备建立所述长连接失败,则向网络设备发送设备请求,以获取所述网络设备所存储的可用服务设备的相关信息;所述步骤S223(未示出)向获取的所述网络设备存储的所述可用服务设备发送所述长连接请求,直至所述长连接建立成功。
[0059] 需要说明的是,所述网络设备可以是包括但不限于包括云端服务设备和异地存储服务设备的存储设备等。其中,所述云端服务设备包括计算机、集线器、交换机、网桥、路由器、网关、网络接口卡、无线接入点(WAP)及调制解调器等。在本申请的一个优选实施例中,优选所述网络设备为云端服务设备。其中,所述云端服务设备仅为本申请所述网络设备的一个优选实施例,其他现有的或今后可能出现的所述网络设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0060] 需要说明的是,在本申请的实施例中,所述网络设备与上述步骤S211(未示出)中的所述网络分配设备可以是相分离的,亦可以是相集成的。当然,其他现有的或今后可能出现的所述网络设备或所述网络分配设备及所述网络设备与所述网络分配设备相集成对应的设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0061] 在本申请的优选实施例中,所述步骤S221(未示出)中若所述客户设备A与所述目标服务设备B建立所述长连接失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G}发送长连接请求;接着在所述步骤S222(未示出)中,若所述客户设备A与本地存储的所有的所述可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G}都建立所述长连接失败,则向所述云端服务设备发送设备请求,以获取所述云端服务设备所存储的可用服务设备的相关信息,其中,所述云端服务设备存储的可用服务设备有:{可用服务设备H、可用服务设备I、可用服务设备J、可用服务设备K},若所述客户设备A获取的所述云端服务设备中的可用服务设备为可用服务设备K;则在所述步骤S223(未示出)中,所述客户设备A向获取的所述云端服务设备存储的所述可用服务设备K发送所述长连接请求,直至所述长连接建立成功。
[0062] 进一步地,所述方法还包括步骤S24,如图4所示。其中,所述步骤S24包括:获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包。
[0063] 需要说明的是,所述服务设备既可以是所述目标服务设备,也可以是所述可用服务设备,即与所述客户设备成功建立所述长连接时对应的服务设备。所述心跳时间间隔为所述客户设备向所述服务设备周期性地发送所述心跳包的心跳周期。
[0064] 需要说明的是,所述心跳包是周期性地通知所述服务设备自己状态的一个自定义的命令字,所述客户设备基于所述心跳时间间隔向所述服务设备发送所述心跳包,以确认所述客户设备与所述服务设备之间还保持着所述长连接。其中,所述心跳包的内容可以是包括但不限于包括很小的数据包,只含包头的一个空数据包及没有任何特别规定的一个极小的数据包等。当然,其他现有的或今后可能出现的所述心跳包如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0065] 在本申请的实施例中,所述步骤S24中的所述客户设备通过周期性地向与之建立所述长连接的对应的所述服务设备发送所述心跳包,以保持与所述服务设备之间的长连接,并在所述服务设备禁用keepalive(连接保持)的操作,分担所述服务设备的资源开销,从而降低了所述服务设备保持所述长连接的资源开销,使得所述服务设备支持更多的并发长连接。
[0066] 进一步地,所述步骤S24包括:获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包;具体地,所述步骤S24包括步骤S241(未示出)、步骤S242(未示出)和步骤S243(未示出),其中,所述步骤S241(未示出)若所述长连接处于连接状态,则获取所述长连接的网络环境信息;所述步骤S242(未示出)基于所述网络环境信息,确定所述心跳时间间隔;所述步骤S243(未示出)基于所述心跳时间间隔向所述目标服务设备发送所述心跳包,以保持所述长连接。
[0067] 优选地,所述网络环境信息包括以下至少任一项:
[0068] 网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息。
[0069] 需要说明的是,所述网络连接信息可以是包括但不限于是包括所述网络连接的网络类型和网络信号信息,其中,所述网络类型包括2G网络、3G网络及WiFi网络等。当然,其他现有的或今后可能出现的所述网络连接信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0070] 需要说明的是,所述地理距离位置信息可以是包括但不限于是包括三维空间距离位置信息、二维平面距离位置信息及二维直线距离位置信息等。当然,其他现有的或今后可能出现的所述地理距离位置信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0071] 需要说明的是,所述历史心跳间隔可以是包括但不限于包括:在所述长连接处于连接状态时,所述客户设备周期性地向所述服务设备发送所述心跳包的历史心跳间隔。当然,其他现有的或今后可能出现的所述历史心跳间隔如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0072] 需要说明的是,所述运营商信息包括所述客户设备与所述服务设备的运营商是否一致的信息,用以确定所述心跳时间间隔。
[0073] 接着本申请的上述实施例中,在所述步骤S241(未示出)中,若所述客户设备A与所述目标服务设备B之间的所述长连接处于连接状态,则获取所述长连接的网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息;接着在所述步骤S242(未示出)中,客户设备A基于获取的所述长连接的网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息确定心跳时间间隔T1,接着在所述步骤S243(未示出)中,所述客户设备A基于所述心跳时间间隔T1向所述目标服务设备B发送所述心跳包,以保持所述客户设备A与所述目标服务设备B之间的所述长连接。
[0074] 进一步地,所述基于所述网络环境信息,确定所述心跳时间间隔包括:
[0075] 根据所述网络连接信息,确定所述心跳时间间隔;或,
[0076] 根据所述地理距离位置信息,确定所述心跳时间间隔;或,
[0077] 根据前一次所述历史心跳间隔,确定所述心跳时间间隔;或,
[0078] 根据与所述目标服务设备相关的所述运营商信息,确定所述心跳时间间隔。
[0079] 在本申请的实施例中,基于所述网络环境信息的动态变化,所述心跳时间间隔也相应地动态自适应变化。根据所述长连接的网络类型及其网络信号强弱,确定所述心跳时间间隔T2;例如,若所述长连接的网络类型为WiFi并且所述网络信号越好,则确定所述心跳时间间隔T2越长。或,根据与所述长连接相连的所述客户设备A与所述目标服务设备B之间的所述三维空间距离位置信息、二维平面距离位置信息或二维直线距离位置信息确定所述心跳时间间隔T3;例如,若与所述长连接相连的所述客户设备与所述目标服务设备B之间的距离位置越远,则确定的所述心跳时间间隔T3越短。或,根据所述客户设备发送所述心跳包的前一次所述历史心跳间隔,确定所述心跳时间间隔T4;例如,若所述客户设备的前一次发送的心跳包检测的心跳成功时对应的所述历史心跳时间间隔为T4’,则确定所述心跳时间间隔可相应地变长为:T4=T4’+△T,其中,△T为在前一次心跳成功后,在T4’的基础上增加的一小段时间。或,根据与所述目标服务设备相关的所述运营商信息,确定所述心跳时间间隔T5;例如,若所述客户设备与所述目标服务设备的运营商为同一运营商,则心跳时间间隔T5相应的变长。
[0080] 进一步地,所述步骤24还包括:获取心跳响应时间间隔,在所述心跳响应时间间隔内,未收到来自所述目标服务设备基于所述心跳包发送的心跳响应信息或收到与所述长连接对应的断开事件,则所述长连接处于断开状态。
[0081] 在本申请的上述实施例中,所述心跳响应时间间隔可以是所述客户设备A向所述目标服务设备B发送所述心跳包之后,基于所述心跳包返回一个心跳响应信息的时间间隔。例如,在所述步骤S24中,获取心跳响应时间间隔为20s,自所述客户设备A发送所述心跳包之后,在所述心跳时间间隔20s内,所述客户设备A未收到来自所述目标服务设备B基于所述心跳包发送的心跳响应信息或收到与所述长连接对应的断开事件,则所述客户设备A与所述目标服务设备B之间的所述长连接处于断开状态。
[0082] 图5示出根据本申请一个方面的一种用于建立长连接的系统流程示意图;所述系统包括所述客户设备和所述目标服务设备,其中,所述目标服务设备包括步骤S511、步骤S512、步骤S513、步骤S514和步骤S515;所述客户设备包括步骤S521、步骤S522、步骤S523、步骤S524、步骤S525和步骤S526。
[0083] 其中,所述步骤S511获取所述服务设备的配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值;所述步骤S512禁用服务设备中的连接保持操作;所述步骤S513接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;所述步骤S514若成功建立所述长连接,则保存所述服务设备;所述步骤所述S515接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。所述步骤S521向服务设备发送长连接请求;所述步骤S522基于所述长连接请求,与所述服务设备建立所述长连接;所述步骤S523若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功;所述步骤S524若所述长连接建立成功,则将所述目标服务设备进行本地保存;所述步骤S525获取心跳时间间隔;所述步骤S526基于所述心跳时间间隔向所述服务设备发送心跳包。
[0084] 在本申请的实施例中,一方面,所述服务设备通过禁用服务设备中的连接保持操作,降低了服务设备维持长连接的资源开销,以支持更多的并发长连接;接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而能够支持更多的并发长连接。另一方面,所述客户设备通过向目标服务设备发送长连接请求,以建立长连接;所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的服务设备建立并保持的长连接数量增加,保证了服务设备能够支持更多的并发长连接。
[0085] 图6示出根据本申请一个方面的一种用于建立长连接的服务设备的结构示意图。该服务设备1包括禁用装置11、请求接收装置12和连接保持装置13。其中,所述禁用装置11,用于禁用服务设备中的连接保持操作;所述请求接收装置12,用于接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;所述连接保持装置13,用于接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。
[0086] 在此,所述服务设备1包括但不限于网络设备以及客户设备与网络设备通过网络相集成所构成的设备。所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,所述服务设备1还可以是运行于所述用户设备与网络设备通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述服务设备1仅为举例,其他现有的或今后可能出现的所述服务设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0087] 上述各装置之间是持续不断工作的,在此,本领域技术人员应理解“持续”是指上述各装置分别实时地或者按照设定的或实时调整的工作模式要求。
[0088] 在本申请的实施例中,通过禁用服务设备中的连接保持操作,克服了现有技术中通过服务设备端的keepalive(连接保持)操作来保持与客户设备的长连接的技术偏见,降低了服务设备维持长连接的资源开销,以支持更多的并发长连接;接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;在长连接建立成功后,接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而使得服务设备能够支持更多的并发长连接。
[0089] 需要说明的是,本申请的所有实施例的实现是基于node js(一种直译式脚本语言中的运行环境)语言,其中所述node js语言是单线程的,在不新增额外线程的情况下,依然可以对事件进行并行处理,并通过事件轮询(event loop)处理机制来实现并行操作。当然,其他现有的或今后可能出现的能够实现本申请的所有实施例的语言如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0090] 在本申请的所有实施例中,采用基于node js语言的服务设备,使得与客户设备建立的每个长连接具有单线程、事件轮询处理机制,从而可以从一定程度上支持更多的并发长连接。
[0091] 在本申请的实施例中,所述长连接建立成功后,所述连接保持装置13接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而使得服务设备能够支持更多的并发长连接。
[0092] 在本申请的实施例中,在所述连接保持装置13中,由于在规定时间内,若服务设备没有基于所述心跳包返回心跳响应信息,则服务设备会接收来自所述客户设备的再次发送的心跳包,直至接收来自所述客户设备的预设次数的心跳包,若在所述预设次数内接收到心跳包后,服务设备都没有基于所述心跳包向所述客户设备发送心跳响应信息,则表示客户设备与用户设备之间的长连接断开。为了降低服务设备在每个长连接上的资源开销,在所述连接保持装置13中,接收来自所述客户设备发送的心跳包,在预设次数范围内,基于一个客户设备的每n个心跳包向所述客户设备发送一次心跳响应信息或者忽略所有的心跳包,不仅能保持所述长连接的连接状态,还尽可能的降低了服务设备在每个长连接上的资源开销,进而支持更多的并发长连接。
[0093] 进一步地,所述服务设备还包括设置装置14,如图7所示,其中,图7示出根据本申请一个方面的一个优选实施例的一种用于建立长连接的服务设备的结构示意图。其中,所述设置装置14用于:获取所述服务设备的配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。
[0094] 在所述设置装置14中,获取服务设备的配置信息,其中,所述配置信息可以是包括但不限于是包括系统配置信息、设备硬件配置信息以及设备软件配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。在本申请的一个优选实施例中,基于所述配置信息最大化设置所述长连接句柄数阈值,使得所述服务设备在同一时间段内能够连接并保持更多的并发长连接。当然,上述基于所述配置信息最大化设置所述服务设备的额长连接句柄数阈值仅为本申请一个方面的优选实施例,其他,其他现有的或今后可能出现的能够实现最大化设置所述服务设备的句柄数阈值的配置信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0095] 进一步地,所述服务设备还包括保存装置15,如图7所示。其中,所述保存装置15用于:若成功建立所述长连接,则保存所述服务设备。
[0096] 在所述保存装置15中,若与客户设备成功建立所述长连接,则将与客户设备对应建立长连接的所述服务设备保存于网络设备中,以供其他客户设备与所述服务设备建立长连接,从而使得所述服务设备能建立并保持更多的长连接。
[0097] 在本申请的实施例中,基于node js语言的服务设备,使得能够与客户设备建立的每个长连接具有单线程、事件轮询处理机制,同时禁用服务设备中的连接保持操作;并接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;接着接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,使得通过上述基于node js语言的服务设备、禁用服务设备中的连接保持操作(keepalive)、设置所述服务设备的长连接句柄数阈值以及发送心跳包过程中的网络质量等因素共同作用,以使所述服务设备能够在同一时间段内能够连接并保持更多的并发长连接。
[0098] 图8示出根据本申请一个方面的一种用于建立长连接的客户设备的结构示意图。该客户设备2包括请求发送装置21和连接重试装置22,其中,所述请求发送装置21向目标服务设备发送长连接请求,以建立长连接;所述连接重试装置22若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功。
[0099] 在本申请的实施例中,所述请求发送装置21通过向目标服务设备发送长连接请求,以建立长连接;所述连接重试装置22若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的所述可用服务设备建立并保持的长连接数量增加,保证了所述可用服务设备能够支持更多的并发长连接。
[0100] 例如,在所述请求发送装置21中,所述客户设备A向所述目标服务设备B发送所述长连接请求,以建立长连接;接着在所述连接重试装置22中,若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,其中,本地存储的可用服务设备有{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G},则逐个地向本地保存的对应所述可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G}发送所述长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的所述可用服务设备建立并保持的长连接数量增加,保证了所述可用服务设备能够支持更多的并发长连接。
[0101] 需要说明的是,所述可用服务设备可以是包括但不限于包括与所述客户设备建立过连接的且处于可用状态下的可用服务设备及存储于本地的与所述客户设备建立长连接的候选服务设备中的可用服务设备。当然,其他现有的或今后可能出现的所述可用服务设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0102] 进一步地,所述请求发送装置包括:设备获取单元(未示出)和请求发送单元(未示出),其中,所述设备获取单元(未示出)用于从网络分配设备获取对应的目标服务设备及备用的可用服务设备,并在所述客户设备上本地存储所述备用的可用服务设备;所述请求发送单元(未示出)用于向所述目标服务设备发送长连接请求,以建立所述长连接。
[0103] 需要说明的是,所述网络分配设备可以是包括但不限于包括本地的网络分配设备或云端的网络分配设备。当然,其他现有的或今后可能出现的所述网络分配设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0104] 接着在本申请的上述实施例,在所述设备获取单元(未示出)中,所述客户设备A从所述网络分配设备获取对应的目标服务设备B以及本地存储的备用的可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G},并在所述客户设备A中本地存储所述备用的可用服务设备;接着在所述请求发送单元(未示出),所述客户设备A向所述目标服务设备B发送长连接请求,以在所述客户设备A与所述目标服务设备B之间建立所述长连接。
[0105] 进一步地,所述请求发送单元(未示出)包括请求发送子单元(未示出)和连接建立子单元(未示出),其中,所述请求发送子单元(未示出),用于向所述目标服务设备发送长连接请求,以建立所述长连接包括:向所述目标服务设备发送长连接请求,并接收来自所述目标服务设备基于所述长连接请求发送的对应响应信息;所述连接建立子单元(未示出),用于基于所述对应响应信息与所述目标服务设备建立所述长连接。
[0106] 需要说明的是,所述对应响应信息可以是包括但不限于包括允许进行长连接建立的数据包,允许进行长连接建立的空数据包及没有报文的报头等。当然,其他现有的或今后可能出现的所述对应响应信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0107] 接着本申请的上述实施例,在所述请求发送单元(未示出)中所述客户设备A向所述服务设备B发送长连接请求,并接收来自所述目标服务设备B基于所述长连接请求发送的对应响应信息;基于所述对应响应信息与所述目标服务设备B建立所述长连接。
[0108] 进一步地,所述客户设备还包括本地保存装置23,如图9所示,其中,图9示出根据本申请一个方面的一个优选实施例的一种用于建立长连接的客户设备的结构示意图。其中,所述本地保存装置23用于:若所述长连接建立成功,则将所述目标服务设备进行本地保存。
[0109] 接着本申请的上述实施例,在所述本地保存装置23中,若所述客户设备A与所述目标服务设备B之间的所述长连接建立成功,则将所述目标服务设备B进行本地保存,以待其他的客户设备与其对对应的所述目标服务设备建立所述长连接失败时,向本地保存的所述目标服务设备B发送长连接请求并建立所述长连接,使得所述目标服务设备能够支持更多的并发长连接。
[0110] 进一步地,所述连接重试装置22:包括本地设备重试单元(未示出)、重试设备获取单元(未示出)和重试连接建立单元(未示出),其中,所述本地设备重试单元(未示出),用于若所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求;所述重试设备获取单元(未示出)用于:若与本地存储的所有所述可用服务设备建立所述长连接失败,则向网络设备发送设备请求,以获取所述网络设备所存储的可用服务设备的相关信息;所述重试连接建立单元(未示出)用于:向获取的所述网络设备存储的所述可用服务设备发送所述长连接请求,直至所述长连接建立成功。
[0111] 需要说明的是,所述网络设备可以是包括但不限于包括云端服务设备和异地存储服务设备的存储设备等。其中,所述云端服务设备包括计算机、集线器、交换机、网桥、路由器、网关、网络接口卡、无线接入点(WAP)及调制解调器等。在本申请的一个优选实施例中,优选所述网络设备为云端服务设备。其中,所述云端服务设备仅为本申请所述网络设备的一个优选实施例,其他现有的或今后可能出现的所述网络设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0112] 需要说明的是,在本申请的实施例中,所述网络设备与上述所述设备获取单元(未示出)中的所述网络分配设备可以是相分离的,亦可以是相集成的。当然,其他现有的或今后可能出现的所述网络设备或所述网络分配设备及所述网络设备与所述网络分配设备相集成对应的设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0113] 在本申请的优选实施例中,所述重试设备获取单元(未示出)中若所述客户设备A与所述目标服务设备B建立所述长连接失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G}发送长连接请求;接着在所述步骤S222(未示出)中,若所述客户设备A与本地存储的所有的所述可用服务设备:{可用服务设备C、可用服务设备D、可用服务设备E、可用服务设备F和可用服务设备G}都建立所述长连接失败,则向所述云端服务设备发送设备请求,以获取所述云端服务设备所存储的可用服务设备的相关信息,其中,所述云端服务设备存储的可用服务设备有:{可用服务设备H、可用服务设备I、可用服务设备J、可用服务设备K},若所述客户设备A获取的所述云端服务设备中的可用服务设备为可用服务设备K;则在所述重试连接建立单元(未示出)中,所述客户设备A向获取的所述云端服务设备存储的所述可用服务设备K发送所述长连接请求,直至所述长连接建立成功。
[0114] 进一步地,所述客户设备还包括心跳包发送装置24,如图9所示。其中,所述心跳包发送装置24用于:获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包。
[0115] 需要说明的是,所述服务设备既可以是所述目标服务设备,也可以是所述可用服务设备,即与所述客户设备成功建立所述长连接时对应的服务设备。所述心跳时间间隔为所述客户设备向所述服务设备周期性地发送所述心跳包的心跳周期。
[0116] 需要说明的是,所述心跳包是周期性地通知所述服务设备自己状态的一个自定义的命令字,所述客户设备基于所述心跳时间间隔向所述服务设备发送所述心跳包,以保持所述客户设备与所述服务设备之间还保持着所述长连接。其中,所述心跳包的内容可以是包括但不限于包括很小的数据包,只含包头的一个空数据包及没有任何特别规定的一个极小的数据包等。当然,其他现有的或今后可能出现的所述心跳包如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0117] 在本申请的实施例中,所述心跳包发送装置24中的所述客户设备通过周期性地向与之建立所述长连接的对应的所述服务设备发送所述心跳包,以保持与所述服务设备之间的长连接,并在所述服务设备禁用keepalive(连接保持)的操作,分担所述服务设备的资源开销,从而降低了所述服务设备保持所述长连接的资源开销,使得所述服务设备支持更多的并发长连接。
[0118] 进一步地,所述心跳包发送装置24包括:信息获取单元(未示出)、确定单元(未示出)和心跳包发送单元(未示出),其中,所述信息获取单元(未示出)用于:若所述长连接处于连接状态,则获取所述长连接的网络环境信息;所述确定单元(未示出)用于:基于所述网络环境信息,确定所述心跳时间间隔;所述心跳包发送单元(未示出)用于:基于所述心跳时间间隔向所述目标服务设备发送所述心跳包,以保持所述长连接。
[0119] 优选地,所述网络环境信息包括以下至少任一项:
[0120] 网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息。
[0121] 需要说明的是,所述网络连接信息可以是包括但不限于是包括所述网络连接的网络类型和网络信号信息,其中,所述网络类型包括2G网络、3G网络及WiFi网络等。当然,其他现有的或今后可能出现的所述网络连接信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0122] 需要说明的是,所述地理距离位置信息可以是包括但不限于是包括三维空间距离位置信息、二维平面距离位置信息及二维直线距离位置信息等。当然,其他现有的或今后可能出现的所述地理距离位置信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0123] 需要说明的是,所述历史心跳间隔可以是包括但不限于包括:在所述长连接处于连接状态时,所述客户设备周期性地向所述服务设备发送所述心跳包的历史心跳间隔。当然,其他现有的或今后可能出现的所述历史心跳间隔如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
[0124] 需要说明的是,所述运营商信息包括所述客户设备与所述服务设备的运营商是否一致的信息,用以确定所述心跳时间间隔。
[0125] 接着本申请的上述实施例中,在所述信息获取单元(未示出)中,若所述客户设备A与所述目标服务设备B之间的所述长连接处于连接状态,则获取所述长连接的网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息;接着在所述确定单元(未示出)中,客户设备A基于获取的所述长连接的网络连接信息、地理距离位置信息、历史心跳间隔或运营商信息确定心跳时间间隔T1,接着在所述心跳包发送单元(未示出)中,所述客户设备A基于所述心跳时间间隔T1向所述目标服务设备B发送所述心跳包,以保持所述客户设备A与所述目标服务设备B之间的所述长连接。
[0126] 进一步地,所述基于所述网络环境信息,确定所述心跳时间间隔包括:
[0127] 根据所述网络连接信息,确定所述心跳时间间隔;或,
[0128] 根据所述地理距离位置信息,确定所述心跳时间间隔;或,
[0129] 根据前一次所述历史心跳间隔,确定所述心跳时间间隔;或,
[0130] 根据与所述目标服务设备相关的所述运营商信息,确定所述心跳时间间隔。
[0131] 在本申请的实施例中,基于所述网络环境信息的动态变化,所述心跳时间间隔也相应地动态自适应变化。根据所述长连接的网络类型及其网络信号强弱,确定所述心跳时间间隔T2;例如,若所述长连接的网络类型为WiFi并且所述网络信号越好,则确定所述心跳时间间隔T2越长。或,根据与所述长连接相连的所述客户设备A与所述目标服务设备B之间的所述三维空间距离位置信息、二维平面距离位置信息或二维直线距离位置信息确定所述心跳时间间隔T3;例如,若与所述长连接相连的所述客户设备与所述目标服务设备B之间的距离位置越远,则确定的所述心跳时间间隔T3越短。或,根据所述客户设备发送所述心跳包的前一次所述历史心跳间隔,确定所述心跳时间间隔T4;例如,若所述客户设备的前一次发送的心跳包检测的心跳成功时对应的所述历史心跳时间间隔为T4’,则确定所述心跳时间间隔可相应地变长为:T4=T4’+△T,其中,△T为在前一次心跳成功后,在T4’的基础上增加的一小段时间。或,根据与所述目标服务设备相关的所述运营商信息,确定所述心跳时间间隔T5;例如,若所述客户设备与所述目标服务设备的运营商为同一运营商,则心跳时间间隔T5相应的变长。
[0132] 进一步地,所述心跳包发送装置24还包括连接断开单元(未示出),用于获取心跳响应时间间隔,在所述心跳响应时间间隔内,未收到来自所述目标服务设备基于所述心跳包发送的心跳响应信息或收到与所述长连接对应的断开事件,则所述长连接处于断开状态。
[0133] 在本申请的上述实施例中,所述心跳响应时间间隔可以是所述客户设备A向所述目标服务设备B发送所述心跳包之后,基于所述心跳包返回一个心跳响应信息的时间间隔。例如,在所述心跳包发送装置24中,获取心跳响应时间间隔为20s,自所述客户设备A发送所述心跳包之后,在所述心跳时间间隔20s内,所述客户设备A未收到来自所述目标服务设备B基于所述心跳包发送的心跳响应信息或收到与所述长连接对应的断开事件,则所述客户设备A与所述目标服务设备B之间的所述长连接处于断开状态。
[0134] 图10示出根据本申请一个方面的一种用于建立长连接的系统设备的交互示意图;所述系统设备包括客户设备和所述服务设备,其中,所述服务设备包括禁用装置11、请求接收装置12、连接保持装置13、设置装置14和保存装置15;所述客户设备包括请求发送装置
21、连接重试装置22、本地保存装置23和心跳包发送装置24。
[0135] 其中,所述禁用装置11,用于禁用服务设备中的连接保持操作;所述请求接收装置12,用于接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;所述连接保持装置13,用于接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态。所述设置装置14,用于获取所述服务设备的配置信息,基于所述配置信息设置所述服务设备的长连接句柄数阈值。所述保存装置15,用于若成功建立所述长连接,则保存所述服务设备。所述请求发送装置21,用于向目标服务设备发送长连接请求,以建立长连接;所述连接重试装置22,用于所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功。所述本地保存装置23,用于若所述长连接建立成功,则将所述目标服务设备进行本地保存。所述心跳包发送装置24,用于获取心跳时间间隔,基于所述心跳时间间隔向所述服务设备发送心跳包。
[0136] 与现有技术相比,本申请提供了一种用于建立长连接的方法和服务设备,通过禁用服务设备中的连接保持操作,降低了服务设备维持长连接的资源开销,以支持更多的并发长连接;接收来自客户设备发送的长连接请求,基于所述长连接请求与所述客户设备建立长连接;接收来自所述客户设备发送的心跳包,基于所述心跳包向所述客户设备发送心跳响应信息,以保持所述长连接的连接状态,从而能够支持更多的并发长连接。
[0137] 进一步地,本申请的另一个方面还提供了一种用于建立长连接的方法和客户设备,通过向目标服务设备发送长连接请求,以建立长连接;所述长连接建立失败,则基于本地存储的可用服务设备的相关信息,向对应所述可用服务设备发送长连接请求,直至所述长连接建立成功,从而使得与客户设备对应建立长连接的服务设备建立并保持的长连接数量增加,保证了服务设备能够支持更多的并发长连接。
[0138] 需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
[0139] 另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
[0140] 对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。