700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 通信方法 装置以及网关 计算设备和介质与流程

通信方法 装置以及网关 计算设备和介质与流程

时间:2022-03-08 06:06:16

相关推荐

通信方法 装置以及网关 计算设备和介质与流程

本公开涉及互联网技术领域,更具体地,涉及一种通信方法、装置以及网关、计算设备和介质。

背景技术:

中国互联网络信息中心(cnnic)在统计宣布,中国网民规模已达到7亿多。这意味着互联网已融入大众生活的方方面面,越来越多的传统企业需要给他们的客户提供线上(即互联网)服务。但是大多传统企业不具备互联网服务建设能力,因此,需要第三方机构提供建设服务。

随着传统企业纷纷寻求线上的服务能力,也催生出巨大的市场。各大互联网公司开始提供软件即服务(software-as-a-service,简称saas)来帮助传统企业提供线上的服务能力。saas服务提供商直接将客户的需求建设完成并提供给客户(传统企业)的客户以便使用,同时saas服务商继续提供维护和升级服务。

在saas技术实现上,成熟的架构是包含一个或多个后端服务进行组合提供服务的应用及在这些应用之前作为代理的统一网关。同时,将这些提供服务的应用和网关进行打包,组成某一个行业的解决方案。如电商行业的saas解决方案、新闻行业的saas解决方案、医疗行业的saas解决方案。根据客户所处的行业,将解决方案提供给客户。同一行业形成一套解决方案的原因是因为同一行业的业务相同,相应的技术实现也相同,因此,可以使用一套技术方案来服务客户以节约成本并提高利润。

在上述的解决方案架构中,网关具有承上启下的作用。对外,收敛同行业的所有客户,如a公司建设a电商系统的需求,b公司建设b电商系统的需求都可以用同一个网关对外解决,达到进行域名收敛解决跨域问题等。对内,提供安全检查,流量控制以及将请求转发给后端提供服务的应用上。

因此,就需要一个高性能低资源消耗的统一网关设计方案,来提升整个saas解决方案的性能并保证提供的服务能力不变。因为网关并不提供具体的业务能力,但在组成解决方案的完整性中又必不可少。因此网关的高性能低消耗就至关重要。

现有技术中统一网关和后端服务应用大多采用http协议连接,对于外部请求进行网关相关处理之后直接新建一个连接进行转发,完成网关代理处理。

然而,使用http协议和后端服务应用进行连接会导致代理性能下降,这是由于http是短连接,并不能长时间保持长连接,每次请求需要新建连接,而多次连接过程增加了时间成本。

此外,http无法多路复用,如果出现请求量暴增的情况,会导致应用和后端服务应用建立大量连接,这会导致超过套接字(socket)的65535的端口限制,导致服务出现不可用的情况。

因此需要一种能保持长连接的连接方式来提升网关性能。

技术实现要素:

有鉴于此,本公开提供了一种能保持长连接的通信方法、装置以及网关、计算设备和介质。

本公开的一个方面提供了一种通信方法,应用于网关,该通信方法包括:首先,接收来自客户端的连接请求,响应于所述连接请求,可以基于通信协议建立所述客户端与服务端长连接,以及对所述长连接进行过期清理以降低资源占有率。

根据本公开的实施例,所述响应于所述连接请求,建立所述客户端与服务端的长连接可以包括如下操作,首先,获取连接请求中的域名和请求路径(querystring),如果所述域名未在异步线程池中加载,则根据所述域名和所述请求路径获取远程过程调用(remotprocedurecall,简称rpc)标识,然后,利用所述远程过程调用标识将连接请求传送给所述远程过程调用标识对应的后端服务以建立长连接,接着,使用异步线程池执行该域名的预加载。

根据本公开的实施例,执行该域名的预加载可以具体包括:如果所述域名未在异步线程池中加载,则获取所述域名对应的后端服务列表,以及如果所述域名对应的后端服务列表中的至少一个后端服务未建立长连接,则对所述至少一个后端服务建立长连接。其中,第二次判断域名是否已在异步线程池中加载可以至少部分解决并发问题,以防止因为异步线程池调度延迟产生重复加载的情况发送,此外,该预加载可以有效减少网关关于用户在同一域名下的数据传输用时,提升用户体验度。

根据本公开的实施例,所述方法还可以包括如下操作,在获取连接请求中的域名和请求路径的同时或之后,获取连接请求中的请求资源,如果所述域名已在异步线程池中加载,则根据域名和请求路径获取远程过程调用调用器,并利用所述远程过程调用调用器和远程过程调用标识将请求资源请求传送给所述远程过程调用标识对应的后端服务。如果所述域名已在异步线程池中加载则表明已存在该域名对应的长连接,通过长连接进行数据传输可以有效降低数据传输用时。

根据本公开的实施例,所述过期清理可以包括以下任意一种或多种:根据长连接数量进行清理、根据长连接使用次数进行清理或者根据长连接最后一次访问时间进行清理。可以通过多维度的长连接资源清理可以实现网关的低资源消耗。

根据本公开的实施例,所述根据长连接数量进行清理可以包括如下操作,首先,获取保持的所有长连接,以及根据长连接保持数量阈值和长连接清理比例得到清理容量,然后对保持的所有长连接根据创建时间进行排序,如根据长连接建立的时间进行排序,接着,对排序后的长连接进行遍历移除直至移除的长连接个数达到所述长连接保持数量阈值与所述清理容量的差值。这样可以通过清理使得长连接保持在合理范围内,如网关的资源利用率高且性能不下降的优选范围内。

根据本公开的实施例,所述根据长连接使用次数进行清理可以包括如下操作,对于保持的每个长连接:如果按照时间间隔的清理策略进行过期清理,则当前时间点和最后一次进行过期清理的时间点之间的第一差值大于第一时长阈值、且长连接使用次数小于设定销毁阈值时,销毁长连接,另外,如果不按照时间间隔的清理策略进行过期清理,则当长连接使用次数小于设定销毁阈值时,销毁长连接,以及如果长连接使用次数大于等于设定销毁阈值时,将当前时间点作为该长连接的最后一次进行过期清理的时间点。这样就可以及时清理使用次数少的长连接,减少资源浪费。

根据本公开的实施例,所述根据长连接最后一次访问时间进行清理可以包括,对于保持的每个长连接:首先,获取当前时间点和最后一次访问的时间点之间的第二差值;以及如果所述第二差值大于第二时长阈值,则销毁长连接。这样可以清理长时间未使用的长连接,减少资源浪费。

本公开的另一个方面提供了一种通信方法,可以包括如下操作:对于已建立并保持的长连接,进行长连接持久化,得到长连接持久化文件,所述长连接在过期时将被清理,这样可以及时保存已保持的长连接,这样长连接可能是用户正在使用的长连接,如果遇到客户端的应用重启,则可以在应用重启之后利用所述长连接持久化文件进行长连接恢复,这样使得即使应用重启,也可以及时恢复之前建立的长连接,提升用户体验度。

根据本公开的实施例,所述进行长连接持久化,得到长连接持久化文件可以包括如下操作:首先,获取当前时间点和最后一次持久化的时间点之间的第三差值,如果所述第三差值大于第三时长阈值,则对所有的长连接进行备份形成第一持久化文件,可以将该第一持久化文件作为持久化文件。此外,如果存在原有持久化文件,则对所述原有持久化文件进行备份,得到备份持久化文件,然后利用所述第一持久化文件代替所述原有持久化文件进行存储,如果存储失败则将所述备份持久化文件作为所述持久化文件,否则将所述第一持久化文件作为所述持久化文件。这样可以保证客户端中持久化文件更新失败时可以利用原有的持久化文件在应用重启后进行长连接建立,尽量避免持久化文件因写入失败而无法使用。

根据本公开的实施例,所述利用所述长连接持久化文件进行长连接恢复可以包括如下操作,如果指定的持久化文件路径存在持久化文件,则根据长连接使用次数和长连接最后一次访问时间对所述持久化文件中的长连接进行清理,得到第二持久化文件。如果所述第二持久化文件中包含的长连接数量小于等于长连接数量阈值,则根据所述持久化文件创建长连接,这样可以对持久化文件进行清理以减少长连接数量,且尽量避免建立的长连接的数量超过网关允许建立的长连接数量。

本公开的另一个方面提供了一种通信装置,可以包括请求接收模块、长连接建立模块和过期清理模块,其中,请求接收模块,用于接收来自客户端的连接请求,长连接建立模块用于响应于所述连接请求,建立所述客户端与服务端的长连接,过期清理模块用于对所述长连接进行过期清理以降低资源占有率。

根据本公开的实施例,所述长连接建立模块可以包括如下单元,第一获取单元、第二获取单元、第一创建单元和预加载单元,其中,所述第一获取单元用于获取连接请求中的域名、请求路径和请求资源,所述第二获取单元用于如果所述域名未在异步线程池中加载,则根据所述域名和所述请求路径获取远程过程调用标识,所述第一创建单元用于利用所述远程过程调用标识将连接请求传送给所述远程过程调用标识对应的后端服务以建立长连接,所述预加载单元用于使用异步线程池执行该域名的预加载。

根据本公开的实施例,所述预加载单元具体可以包括:列表获取子单元和预加载子单元,所述列表获取子单元用于如果所述域名未在异步线程池中加载,则获取所述域名对应的所有后端服务列表,所述预加载子单元用于如果所述域名对应的所有后端服务列表中的至少一个后端服务未建立长连接,则对所述至少一个后端服务建立长连接。

根据本公开的实施例,所述装置还可以包括资源获取模块和资源传送模块,其中,所述资源获取模块用于在获取连接请求中的域名和请求路径的同时或之后,获取连接请求中的请求资源,所述资源传送模块用于如果所述域名已在异步线程池中加载,则根据域名和请求路径获取远程过程调用调用器,并利用所述远程过程调用调用器和远程过程调用标识将请求资源请求传送给所述远程过程调用标识对应的后端服务。

根据本公开的实施例,所述过期清理模块可以包括以下任意一种或多种单元第一清理单元、第二清理单元和第三清理单元,其中,所述第一清理单元用于根据长连接数量进行清理,所述第二清理单元用于根据长连接使用次数进行清理,所述第三清理单元用于根据长连接最后一次访问时间进行清理。

根据本公开的实施例,所述第一清理单元可以包括第一获取子单元、容量获取子单元、排序子单元和第一销毁子单元,其中,所述第一获取子单元用于获取保持的所有长连接,所述容量获取子单元用于根据长连接保持数量阈值和长连接清理比例得到清理容量,所述排序子单元用于对保持的所有长连接根据创建时间进行排序,所述第一销毁子单元,用于对排序后的长连接进行遍历移除直至移除的长连接个数达到所述长连接保持数量阈值与所述清理容量的差值。

根据本公开的实施例,所述第二清理单元可以包括第二销毁子单元、第三销毁子单元和时间更新子单元,其中,所述第二销毁子单元用于如果按照时间间隔的清理策略进行过期清理,则当前时间点和最后一次进行过期清理的时间点之间的第一差值大于第一时长阈值、且长连接使用次数小于设定销毁阈值时,销毁长连接,所述第三销毁子单元用于如果不按照时间间隔的清理策略进行过期清理,则当长连接使用次数小于设定销毁阈值时,销毁长连接,所述时间更新子单元用于如果长连接使用次数大于等于设定销毁阈值时,将当前时间点作为该长连接的最后一次进行过期清理的时间点。

根据本公开的实施例,所述第三清理单元可以包括第二获取子单元和第四销毁子单元,其中,所述第二获取子单元用于获取当前时间点和最后一次访问的时间点之间的第二差值,所述第四销毁子单元用于如果所述第二差值大于第二时长阈值,则销毁长连接。

本公开的另一个方面提供了一种通信装置,该通信装置可以包括持久化模块和恢复模块,其中,所述持久化模块用于对于已建立并保持的长连接,进行长连接持久化,得到长连接持久化文件,所述长连接在过期时将被清理,所述恢复模块用于在应用或网关重启之后,利用所述长连接持久化文件进行长连接恢复。

根据本公开的实施例,所述持久化模块具体可以包括第三获取单元和文件形成单元,其中,所述第三获取单元用于获取当前时间点和最后一次持久化的时间点之间的第三差值,所述文件形成单元用于如果所述第三差值大于第三时长阈值,则对所有的长连接进行备份形成第一持久化文件作为持久化文件,如果存在原有持久化文件,则对所述原有持久化文件进行备份,得到备份持久化文件,利用所述第一持久化文件代替所述原有持久化文件进行存储,如果存储失败则将所述备份持久化文件作为所述持久化文件,否则将所述第一持久化文件作为所述持久化文件。

根据本公开的实施例,所述恢复模块可以包括第四清理单元和第二创建单元,其中,所述第四清理单元用于如果指定的持久化文件路径存在持久化文件,则根据长连接使用次数和长连接最后一次访问时间对所述持久化文件中的长连接进行清理,得到第二持久化文件,所述第二创建单元用于如果所述第二持久化文件中包含的长连接数量小于等于长连接数量阈值,则根据所述持久化文件创建长连接。

本公开的另一方面提供了一种网关,包括如上所述的通信装置和服务配置中心,其中,所述服务配置中心用于按域名注册该域名下所有的后端服务列表。

本公开的另一方面提供了一种互联网,包括如上所述的通信装置、如上所述的网关和后端服务器集群,其中,所述后端服务器集群用于提供具体业务服务。

本公开的另一方面提供了一种计算设备,包括一个或多个处理器以及存储装置,该存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,实现如上所述的方法。

本公开的另一方面提供了一种非易失性存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。

本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。

根据本公开的实施例,基于通信协议,如基于传输控制协议(transmissioncontrolprotocol,简称tcp)协议建立长连接,可以实现多路复用的长连接方式,至少部分地解决现有技术基于http协议建立短连接和连接池无法满足性能需求的问题,并因此可以实现提升网关的性能的技术效果。此外,由于客户端的应用通常不会主动取消长连接,随着连接请求的增加,使得网关中的存在的长连接也随之增加,而部分长连接的资源使用效率较低,通过对长连接进行过期清理可以有效减少资源使用效率较低的长连接,进而实现网关的低消耗。

根据本公开的实施例,按域名的服务预加载技术可以预先加载用户可能需要建立的长连接,实现对可能需要使用的资源进行预先创建连接并加载存储,有效减少数据传输用时,提升用户体验度。

根据本公开的实施例,通过多维度的长连接资源清理,可以有效清理资源使用效率较低的长连接,进而降低网关的消耗。

根据本公开的实施例,通过长连接持久化和长连接恢复可以在应用重启时至少部分恢复用户使用的长连接,提升用户体验度。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:

图1示意性示出了根据本公开实施例的通信方法、装置以及网关、计算设备和介质的应用场景;

图2示意性示出了根据本公开实施例的通信方法的流程图;

图3a示意性示出了根据本公开实施例的建立所述客户端与服务端的长连接的方法的流程图;

图3b示意性示出了根据本公开实施例的建立长连接的示意图;

图3c示意性示出了根据本公开另一实施例的建立所述客户端与服务端的长连接的方法的流程图;

图3d示意性示出了根据本公开实施例的数据传输示意图;

图4a示意性示出了根据本公开实施例的过期清理方法的流程图;

图4b示意性示出了根据本公开另一实施例的过期清理方法的流程图;

图4c示意性示出了根据本公开另一实施例的过期清理方法的流程图;

图5a示意性示出了根据本公开另一实施例的通信方法的流程图;

图5b示意性示出了根据本公开实施例的长连接持久化的方法的流程图;

图5c示意性示出了根据本公开实施例的长连接恢复的方法的流程图;

图6a示意性示出了根据本公开实施例的通信装置的框图;

图6b示意性示出了根据本公开另一实施例的通信装置的框图;

图6c示意性示出了根据本公开实施例的互联网的示意图;以及

图7示意性示出了根据本公开实施例的计算设备的方框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。在使用类似于“a、b或c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b或c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“a或b”应当被理解为包括“a”或“b”、或“a和b”的可能性。

为了提升网关性能,现有技术也有在代理层建立和后端服务应用的基于http协议的连接池,但是如果后端服务应用过多,连接池能够预先和后端服务创建的连接的数量有限,同时连接池被大量过期连接占据,会出现在网关在只有少量请求连接的情况下,需要维护大量连接,浪费机器资源,占用网络流量。因此就需要有一种能够保持长连接并多路复用的连接方式,同时对于这些长连接能够进行资源控制,清理无效数据。

本公开的实施例提供了一种通信方法、装置以及网关、计算设备和介质。该方法包括长连接建立过程和长连接过期清理过程。在长连接建立过程中,可以基于如tcp协议建立长连接来实现多路复用;在长连接过期清理过程中,可以采用多种清理策略来尽量减少网关中资源利用率低的长连接来实现低消耗。

图1示意性示出了根据本公开实施例的通信方法、装置以及网关、计算设备和介质的应用场景。如图1所示,系统架构100可以包括客户端、网络、网关和服务器等。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104,网关106和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备101、102、103通过网络104和网关106与服务器105交互,以接收或发送数据等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。

终端设备101、102、103可以是具有显示屏并且支持多种应用的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

网关106可以根据终端设备101、102、103发送的连接请求使得终端设备101、102、103与被请求的服务器105之间建立连接。

服务器105可以是提供各种服务的服务器,实现具体的解决方案中的业务,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析、处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。

需要说明的是,本公开实施例所提供的通信方法一般可以由网关106执行。相应地,本公开实施例所提供的通信装置一般可以设置于网关106中。

应该理解,图1中的终端设备、网络、网关和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

图2示意性示出了根据本公开实施例的通信方法的流程图。

如图2所示,该方法包括在操作s201~操作s203。

在操作s201中,接收来自客户端的连接请求。例如接收用户的http请求。

在操作s202中,响应于所述连接请求,建立所述客户端与服务端的长连接。

在本实施例中,当网关检测到某一个域名第一次在网关被请求时,可以根据该连接请求获取域名和请求路径,然后可以根据域名和请求路径来获取对应的后端服务rpc标识,该rpc标识对应提供具体服务的服务器,使得可以根据该rpc标识建立长连接。具体地,可以基于tcp协议建立长连接。域名、访问路径与rpc标识的对应关系可以存储在网关中,也可以存储在网关之外,如独立的服务配置中心中,该服务配置中心可以通过按域名注册该域名下所有的后端服务(service)列表的方式获取域名、访问路径与rpc标识的对应关系。长连接的建立方式可以为通过客户端与服务器之间的三次握手来实现。

此外,为了提升用户体验度,可以在建立长连接之后,对该域名进行预加载,即根据用户请求的域名下包括的所有rpc标识对应的服务建立长连接,使得用户在请求该域名下的其它资源时无需等待建立长连接,有效减少耗时。

需要说明的是,长连接的保持可以利用分布式服务框架中自带的长连接保持功能来保持长连接,还可以采用定时心跳的功能来保持长连接,以免连接被服务框架销毁。

在另一个实施例中,所述长连接为多路复用的长连接。如基于tcp协议的响应模式建立多路复用的长连接。为了实现长连接的多路复用,需要满足一些要求,例如,套接字socket数据结构中的本地端口号必须与传入的分组报文的目的端口号相匹配;在套接字数据结构中,任何包含了通配符*的字段可以匹配分组报文中的相应字段的任何值;此外,如果有一个以上的套接字数据结构与传入的分组报文地址的四个字段匹配,则通配符最少的获得该分组报文。

在操作s203中,对所述长连接进行过期清理。

在本实施例中,由于保持长连接,必然会导致网关的资源占用量随着长连接的数量上升而上升,但其中很多长连接因为业务功能性的原因,只有一次或者很少的访问的量,却占用大量网络资源。为了降低资源占用率,同时保证网关的性能,需要一套机制清理来甄别和清理无效或者很少使用的长连接。

具体可以采用多种过期清理策略对长连接进行清理,例如,根据长连接的总数、长连接的建立时长、长连接的使用次数等对长连接进行清理,这样可以有效清除资源利用率低的长连接,实现低消耗的网关。在一个实施例中,所述过期清理可以包括以下任意一种或多种:根据长连接数量进行清理、根据长连接使用次数进行清理、根据长连接最后一次访问时间进行清理。

本公开提供的通信方法,实现了多路复用的长连接方式,可以至少部分地解决现有技术无法满足网关性能需求的问题。此外,由于客户端的应用通常不会主动取消长连接,随着连接请求的增加,使得网关中的存在的长连接也随之增加,而部分长连接的资源使用效率较低,通过对长连接进行过期清理可以有效减少资源使用效率较低的长连接,进而实现网关的低消耗。

图3a示意性示出了根据本公开实施例的建立所述客户端与服务端的长连接的方法的流程图。

如图3a所示,所述响应于连接请求,建立所述客户端与服务端的长连接可以包括操作s301~操作s304。

在操作s301中,获取连接请求中的域名和请求路径。

在本实施例中,接收用户的http请求并解析请求中的数据获取host字段,它即为用户访问的域名。然后可以利用布隆过滤器(bloomfliter)判断该域名是否已经被加载,如使用域名和请求路径作为秘钥(key),判断该域名是否已被加载。如果未被加载过,则表明还未创建长连接,则需要创建长连接。其中,布隆过滤器是一个基于二进制向量和映射函数的数据过滤算法。

以请求连接https://pro./mall/active/xxx/xx为例进行说明,pro.为域名,https://pro./mall/active/xxx/为请求路径,xx为请求资源。

在操作s302中,如果所述域名未在异步线程池中加载,则根据所述域名和所述请求路径获取远程过程调用标识。

在本实施例中,如果所述域名未在异步线程池中加载则表明该域名没有创建长连接,可以根据域名和请求路径从服务配置中心中获取该域名和请求路径对应的rpc连接串,即上述rpc标识。

在操作s303中,利用所述远程过程调用标识将连接请求传送给所述远程过程调用rpc标识对应的后端服务以建立长连接。

在本实施例中,可以根据该rpc标识,rpc框架的应用程序编程接口(applicationprogramminginterface,简称api)建立和后端服务的长连接。

图3b示意性示出了根据本公开实施例的建立长连接的示意图。

如图3b所示,在双方基于如tcp协议的通信之前,需要通过“三次握手”建立一条连接。连接建立以后双方就可以进行数据交互了。例如,首先客户client端发送连接请求报文syn,服务server端接收连接请求报文后回复ack报文,并为这次连接分配资源。client端接收到ack报文后也向server段发送ack报文,并分配资源,这样tcp长连接就建立了。

在操作s304中,使用异步线程池执行该域名的预加载。

在本实施例中,预加载具体可以包括:如果所述域名未在异步线程池中加载,则获取所述域名对应的所有后端服务列表;以及如果所述域名对应的所有后端服务列表中的至少一个后端服务未建立长连接,则对所述至少一个后端服务建立长连接。其中,在此再一次确定所述域名未在异步线程池中加载是为了防止并发问题,防止因为异步线程池调度延迟产生重复加载的情况发生。通过预加载可以使得所述域名对应的所有后端服务列表中所有后端服务建立长连接,由于该域名对应的所有后端服务都是具有较大可能性需要建立连接,通过预加载使得不必等用户发送请求后才开始建立长连接,使得用户的访问立即得到响应,提升用户体验度。

图3c示意性示出了根据本公开另一实施例的建立所述客户端与服务端的长连接的方法的流程图。

如图3c所示,在本实施例中,所述方法还可以包括操作s305~操作s306。

在操作s305中,在获取连接请求中的域名和请求路径的同时或之后,获取连接请求中的请求资源。

在操作s306中,如果所述域名已在异步线程池中加载,则根据域名和请求路径获取远程过程调用调用器,并利用所述远程过程调用调用器和远程过程调用标识将请求资源请求传送给所述远程过程调用标识对应的后端服务。

在本实施例中,如果所述域名已在异步线程池中加载则表明已经创建了长连接,因此可以从存储的已预加载的长连接中,根据域名和请求路径获取远程过程调用rpc调用器(如dubbo、jsf、grpc)等,将用户的请求资源传递给实际提供业务服务的后端服务模块进行处理。

图3d示意性示出了根据本公开实施例的数据传输示意图。如图3d所示,为了实现数据传输,可以包括应用层、传输层、网络层、数据链路层和物理层,其中,应用层和传输层之间通过套接字(socket)连接,socket实际上提供了进行通信的端点,进行通信之前,双方首先各自建立一个端点,在网络上,每个socket用一个半相关描述:(协议,本地地址,本地端口),用于描述ip地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算设备之间的通信。在互联网上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。这样可以通过rpc调用器将用户的请求资源发送给指定的socket,以将用户的请求资源传递给实际提供业务服务的后端模块进行处理。

本公开提供的建立长连接的方法根据异步线程池中是否加载了请求连接的域名,如果没有加载则表明没有建立长连接,此时可以先利用rpc框架的api建立长连接,然后可以以域名为key清理布隆过滤器中该域名已加载的标志位,接着使用异步线程池执行该域名的预加载任务,实现该域名对应的全部后端服务建立长连接,提升网关性能。如果已加载则表明已经建立长连接,则可以根据域名和请求路径获取远程过程调用rpc调用器(如dubbo、jsf、grpc)等,将用户的请求资源传递给实际提供业务服务的后端模块进行处理。

图4a示意性示出了根据本公开实施例的过期清理方法的流程图。

如图4a所示,所述根据长连接数量进行清理可以包括操作s401~操作s404。

在操作s401中,获取保持的所有长连接。

在操作s402中,根据长连接保持数量阈值和长连接清理比例得到清理容量。

在操作s403中,对保持的所有长连接根据创建时间进行排序。

在操作s404中,对排序后的长连接进行遍历移除直至移除的长连接个数达到所述长连接保持数量阈值与所述清理容量的差值。

在本实施例中,为了在总量上控制资源占用率不超过系统的阀值,例如机器的cpu的资源是有限的,如果某一个线程或进程因为bug或者其它原因占用cpu资源较高的时候,整机的性能就会变得很差。需要进行资源隔离或者对该线程进行资源限制,以保证其它功能和用户不受影响。

具体地,可以首先获取代理层和后端应用建立的所有长连接的缓存,并读取预设的最大缓存量配置值,记为maxnum。判断当前保持的长连接数量curnum是否大于maxnum,如果否,则结束;如果是,则读取预设的超过最大量的清理比例,记为clearratio。通过计算maxnum×clearratio得出清理容量,记为newsize。然后对缓存中的长连接根据创建时间的时间戳大小进行升序排列,接着对排序后的长连接进行遍历移除,同时进行移除计数,当计数值的大小等于maxnum与newsize的差时,完成清理,结束流程。长连接保持数量阈值、长连接清理比例可以根据经验或实验结果而定,在此不做限定。

图4b示意性示出了根据本公开另一实施例的过期清理方法的流程图。

如图4b所示,对于保持的每个长连接,所述根据长连接使用次数进行清理可以包括操作s405~操作s407。

在操作s405中,如果按照时间间隔的清理策略进行过期清理,则当前时间点和最后一次进行过期清理的时间点之间的第一差值大于第一时长阈值、且长连接使用次数小于设定销毁阈值时,销毁长连接。

在操作s406中,如果不按照时间间隔的清理策略进行过期清理,则当长连接使用次数小于设定销毁阈值时,销毁长连接。

在操作s407中,如果长连接使用次数大于等于设定销毁阈值时,将当前时间点作为该长连接的最后一次进行过期清理的时间点。

在一个具体实施例中,在保证长连接的总量受到控制时,对于单个长连接,也可能出现只访问了一次,但是网关中,并没有触发总量的清理机制,这样也会导致网关中存在需要清除但无法清除的长连接。为了使得未触发总量清理规则的使用次数少的长连接被清理掉,就需要一个按使用次数清理机制。例如,可以首先获取代理层和后端应用建立长连接的缓存中的长连接,并对每一个长连接进行遍历。然后根据配置判断当前的清理策略是否按时间间隔进行次数清理,如果是,则计算当前时间点now和上一次清理时间点lastcleantime之间的清理时间差,该时间差记为cleaninterval,判断cleaninterval是否大于预设的清理间隔,如果是,则进一步判断当前长连接的使用次数(usetimes)是否小于设定销毁阈值,如果是,则基于缓存的长连接的秘钥(key)调用rpc框架api销毁该长连接,该设定销毁阈值为表示使用次数的阈值,否则不销毁该长连接。如果当前的清理策略不是按时间间隔进行次数清理,判断当前长连接的使用次数(usetimes)是否小于设定销毁阈值,如果是,则基于缓存的长连接的秘钥(key)调用rpc框架api销毁该长连接。

此外,如果该长连接的使用次数大于等于设定销毁阈值,则认为该长连接是需要保留的。此时,标记lastceantime为当前时间,流程结束。第一差值、第一时长阈值、设定销毁阈值可以是根据经验或实验结果而定,在此不做限定。

图4c示意性示出了根据本公开另一实施例的过期清理方法的流程图。

如图4c所示,为了进一步清理根据访问次数进行清理并未命中的资源利用率低的长连接,还可以根据长连接最后一次访问时间进行清理。如指定时间差较大,同时用户在时间差前几分钟访问量较高,而后期无访问量,如电商发起的秒杀活动等场景中,也会导致资源利用率低的长连接较长时间驻留在服务中,造成资源被低利用率占用。对于保持的每个长连接,所述根据长连接最后一次访问时间进行清理可以包括操作s408~操作s409。

在操作s408中,获取当前时间点和最后一次访问的时间点之间的第二差值。

在操作s409中,如果所述第二差值大于第二时长阈值,则销毁长连接。

在一个具体实施例中,可以首先获取和后端服务建立长连接的缓存中的长连接,并对每一个长连接进行遍历。然后计算该长连接最后一次访问时间点和当前时间点now之间的时间差,将该时间差记为timeinterval。接着判断timeinterval是否大于预设的最近最久未访问的时间差,如果是,则基于缓存的长连接key,调用rpc框架api销毁该长连接,流程结束;如果否,则流程结束。

图5a示意性示出了根据本公开另一实施例的通信方法的流程图。

如图5a所示,本公开的另一方面提供了一种通信方法,可以适用于客户端,所述通信方法可以包括操作s501~操作s502。

在操作s501中,对于已建立并保持的长连接,进行长连接持久化,得到长连接持久化文件,所述长连接在过期时将被清理。

在操作s502中,在应用重启之后,利用所述长连接持久化文件进行长连接恢复。

如前所述采用了长连接预加载技术可以提升网关性能,但是应用重启之后所有的缓存长连接都会变成无效,当应用重启之后第一次访问时需要在用户请求线程创建和后端服务的长连接,这会占用一定的时间,影响用户体验。由于应用重启之前,所有保持的长连接都是对用户比较有用的长连接。因此可以使用持久化技术进行长连接持久化和重启恢复技术来恢复至少部分长连接,进而提升用户体验。此外,依据2/8原则,百分之八十的访问集中在百分之二十的功能上,为了避免恢复的长连接过多导致占用过多资源,可以仅恢复一定比例的长连接而非恢复全部长连接。其中,长连接持久化和重启恢复可以主要包含两个流程:长连接持久化流程和长连接恢复流程。

需要说明的是,该长连接持久化和长连接恢复技术同样适用于网关,这样,当网关重启之后,可以快速至少部分恢复长连接,提升用户体验度。

图5b示意性示出了根据本公开实施例的长连接持久化的方法的流程图。

如图5b所示,所述进行长连接持久化,得到长连接持久化文件可以包括操作s5011~操作s5012。

在操作s5011中,获取当前时间点和最后一次持久化的时间点之间的第三差值。

在操作s5012中,如果所述第三差值大于第三时长阈值,则对所有的长连接进行备份形成第一持久化文件;其中,如果存在原有持久化文件,则对所述原有持久化文件进行备份,得到备份持久化文件,利用所述第一持久化文件代替所述原有持久化文件进行存储,如果存储失败则将所述备份持久化文件作为所述持久化文件,否则将所述第一持久化文件作为所述持久化文件。

在一个具体实施例中,长连接持久化流程可以包括如下流程:

1)应用启动后,启动一个长连接持久化线程。

2)持久化线程读取预设的第三时长阈值,该第三时长阈值表征预设的持久化间隔,并计算当前时间点和上次持久化时间点之间的差值。如果差值大于第三时长阈值,进入流程3),否则流程结束。

3)修改上一次磁盘里已经存在的长连接持久化文件名,可以改为以.bak为后缀的文件。

4)按缓存的自然顺序遍历缓存中的所有长连接,并将长连接信息写入磁盘文件,该文件可以以.tmp为后缀。

5)如果tmp文件写入失败,则进入流程6,否则进入流程7。

6)恢复.bak文件为正式文件,保证磁盘有持久化文件。

7)修改tmp文件名为正式的文件名,使此文件为最新的持久化文件。

8)删除之前备份的bak文件,流程结束。

本公开提供的长连接持久化流程可以通过对长连接进行备份以实现持久化,此外,考虑了存在备份文件写入失败的情况,给出了防止因备份文件写入失败而导致持久化文件丢失的方案。

图5c示意性示出了根据本公开实施例的长连接恢复的方法的流程图。

如图5c所示,所述利用所述长连接持久化文件进行长连接恢复可以包括操作s5021~操作s5022。

在操作s5021中,如果指定的持久化文件路径存在持久化文件,则根据长连接使用次数和长连接最后一次访问时间对所述持久化文件中的长连接进行清理,得到第二持久化文件。

在操作s5022中,如果所述第二持久化文件中包含的长连接数量小于等于长连接数量阈值,则根据所述持久化文件创建长连接。

在一个具体实施例中,长连接恢复流程可以如下所示。

1)应用重启时调用钩子函数,进行长连接恢复操作。

2)根据指定的持久化文件路径检查是否存在持久化文件。如果存在,进入流程3,否则流程结束。

3)根据长连接最后一次访问时间清理持久化文件中的过期长连接,例如,最后一次访问时间距离当前时间点的差值大于预设阈值时进行长连接销毁。

4)根据长连接使用次数(访问次数)清理持久化文件中的过期长连接,例如,长连接使用次数小于预设阈值时进行长连接销毁。

5)根据长连接恢复计数器,判断恢复的长连接总数是否大于预设的总数阈值。如果大于,则流程结束。否则进入流程6。

6)依据磁盘中的长连接信息,调用rpc框架的api创建长连接并放入内存缓存。流程结束。

本公开提供的长连接恢复方法可以在应用重启之后利用持久化文件恢复至少部分长连接,避免因用户重新建立长连接而等待过长时间,有助于提升用户体验度。此外,在利用持久化文件恢复长连接之前,首先对持久化文件中的用户希望恢复概率低的长连接进行清理,可以有效减少需要恢复的长连接个数,且能尽量使得用户希望恢复概率高的长连接被恢复。

图6a示意性示出了根据本公开实施例的通信装置的框图。

本公开的另一个方面提供了一种通信装置600,如图6a所示,该通信装置可以包括请求接收模块610、长连接建立模块620和过期清理模块630,其中,请求接收模块用于接收来自客户端的连接请求,长连接建立模块620用于响应于所述连接请求,建立所述客户端与服务端的长连接,过期清理模块630用于对所述长连接进行过期清理以降低资源占有率。

具体地,所述长连接可以为多路复用的长连接。

其中,所述长连接建立模块620可以包括:第一获取单元、第二获取单元、第一创建单元和预加载单元。所述第一获取单元可以用于获取连接请求中的域名、请求路径和请求资源,所述第二获取单元可以用于如果所述域名未在异步线程池中加载,则根据所述域名和所述请求路径获取远程过程调用标识,所述第一创建单元可以用于利用所述远程过程调用标识将连接请求传送给所述远程过程调用标识对应的后端服务以建立长连接,所述预加载单元可以用于使用异步线程池执行该域名的预加载。

在一个实施例中,所述预加载单元具体可以包括:列表获取子单元和预加载子单元,所述列表获取子单元用于如果所述域名未在异步线程池中加载,则获取所述域名对应的所有后端服务列表,所述预加载子单元用于如果所述域名对应的所有后端服务列表中的至少一个后端服务未建立长连接,则对所述至少一个后端服务建立长连接。

根据本公开的实施例,所述装置600还可以包括资源获取模块640和资源传送模块650,其中,所述资源获取模块640用于在获取连接请求中的域名和请求路径的同时或之后,获取连接请求中的请求资源,所述资源传送模块650用于如果所述域名已在异步线程池中加载,则根据域名和请求路径获取远程过程调用调用器,并利用所述远程过程调用调用器和远程过程调用标识将请求资源请求传送给所述远程过程调用标识对应的后端服务。

在一个实施例中,所述过期清理模块630可以包括以下任意一种或多种单元第一清理单元、第二清理单元和第三清理单元,其中,所述第一清理单元用于根据长连接数量进行清理,所述第二清理单元用于根据长连接使用次数进行清理,所述第三清理单元用于根据长连接最后一次访问时间进行清理。

其中,所述第一清理单元可以包括第一获取子单元、容量获取子单元、排序子单元和第一销毁子单元,其中,所述第一获取子单元用于获取保持的所有长连接,所述容量获取子单元用于根据长连接保持数量阈值和长连接清理比例得到清理容量,所述排序子单元用于对保持的所有长连接根据创建时间进行排序,所述第一销毁子单元,用于对排序后的长连接进行遍历移除直至移除的长连接个数达到所述长连接保持数量阈值与所述清理容量的差值。

所述第二清理单元可以包括第二销毁子单元、第三销毁子单元和时间更新子单元,其中,所述第二销毁子单元用于如果按照时间间隔的清理策略进行过期清理,则当前时间点和最后一次进行过期清理的时间点之间的第一差值大于第一时长阈值、且长连接使用次数小于设定销毁阈值时,销毁长连接,所述第三销毁子单元用于如果不按照时间间隔的清理策略进行过期清理,则当长连接使用次数小于设定销毁阈值时,销毁长连接,所述时间更新子单元用于如果长连接使用次数大于等于设定销毁阈值时,将当前时间点作为该长连接的最后一次进行过期清理的时间点。

所述第三清理单元可以包括第二获取子单元和第四销毁子单元,其中,所述第二获取子单元用于获取当前时间点和最后一次访问的时间点之间的第二差值,所述第四销毁子单元用于如果所述第二差值大于第二时长阈值,则销毁长连接。

图6b示意性示出了根据本公开另一实施例的通信装置的框图。

在本公开的另一个实施例中,如图6b所示,还提供了一种通信装置6000,可以设置在客户端中,所述装置6000可以包括持久化模块660和恢复模块670,其中,所述持久化模块660用于对于已建立并保持的长连接,进行长连接持久化,得到长连接持久化文件,所述长连接在过期时将被清理,所述恢复模块670用于在应用重启之后,利用所述长连接持久化文件进行长连接恢复。

其中,所述持久化模块660具体可以包括第三获取单元和文件形成单元,其中,所述第三获取单元用于获取当前时间点和最后一次持久化的时间点之间的第三差值,所述文件形成单元用于如果所述第三差值大于第三时长阈值,则对所有的长连接进行备份形成第一持久化文件作为持久化文件,如果存在原有持久化文件,则对所述原有持久化文件进行备份,得到备份持久化文件,利用所述第一持久化文件代替所述原有持久化文件进行存储,如果存储失败则将所述备份持久化文件作为所述持久化文件,否则将所述第一持久化文件作为所述持久化文件。

所述恢复模块670可以包括第四清理单元和第二创建单元,其中,所述第四清理单元用于如果指定的持久化文件路径存在持久化文件,则根据长连接使用次数和长连接最后一次访问时间对所述持久化文件中的长连接进行清理,得到第二持久化文件,所述第二创建单元用于如果所述第二持久化文件中包含的长连接数量小于等于长连接数量阈值,则根据所述持久化文件创建长连接。

根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

例如,请求接收模块610、长连接建立模块620、过期清理模块630、资源获取模块640、资源传送模块650、持久化模块660和恢复模块670中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,请求接收模块610、长连接建立模块620、过期清理模块630、资源获取模块640、资源传送模块650、持久化模块660和恢复模块670中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,请求接收模块610、长连接建立模块620、过期清理模块630、资源获取模块640、资源传送模块650、持久化模块660和恢复模块670中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

本公开的另一方面提供了一种网关,包括如上所述的通信装置和服务配置中心,其中,所述服务配置中心用于按域名注册该域名下所有的后端服务列表。

本公开的另一方面提供了一种互联网,包括如上所述的网关和后端服务器集群,其中,所述后端服务器集群用于提供具体业务服务。

图6c示意性示出了根据本公开实施例的互联网的示意图。如图6c所示,网关从客户端接收连接请求之后,从服务配置中心得到该连接请求包含的域名与该域名下所有的后端服务列表,然后通过rpc框架构建长连接或者传输数据。

其中,服务配置中心用于按域名注册该域名下所有的后端服务(service)列表,给网关提供读接口或者把数据推送或者缓存到网关内存中,使网关按域名+请求路径来获取对应的后端服务rpc标识,以建立长连接。

后端服务集群用于提供具体业务服务,实现具体的解决方案中的各种服务,如服务1、服务2、服务3、服务4、服务5、服务6等中的一种或多种。如在电商行业中,可以包含采购,商品,用户等等服务。

网关在整个互联网中起到承上启下的作用,用来进行流量控制,安全管理以及和后端的服务发现,长连接建立和保持等。

图7示意性示出了根据本公开实施例的适于实现上文描述的方法的计算设备的方框图。图7示出的计算设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图7所示,根据本公开实施例的计算设备700包括处理器701,其可以根据存储在只读存储器(rom)702中的程序或者从存储部分708加载到随机访问存储器(ram)703中的程序而执行各种适当的动作和处理。处理器701例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器701还可以包括用于缓存用途的板载存储器。处理器701可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

在ram703中,存储有设备700操作所需的各种程序和数据。处理器701、rom702以及ram703通过总线704彼此相连。处理器701通过执行rom702和/或ram703中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom702和ram703以外的一个或多个存储器中。处理器701也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。

根据本公开的实施例,设备700还可以包括输入/输出(i/o)接口705,输入/输出(i/o)接口705也连接至总线704。设备700还可以包括连接至i/o接口705的以下部件中的一项或多项:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。

根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被处理器701执行时,执行本公开实施例的设备中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。

本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。

根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。

例如,根据本公开的实施例,计算机可读介质可以包括上文描述的rom702和/或ram703和/或rom702和ram703以外的一个或多个存储器。

附图中的流程图和框图,图示了按照本公开各种实施例的设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

技术特征:

1.一种通信方法,应用于网关,所述方法包括:

接收来自客户端的连接请求;

响应于所述连接请求,建立所述客户端与服务端的长连接;以及对所述长连接进行过期清理。

2.根据权利要求1所述的方法,其中,所述长连接为多路复用的长连接。

3.根据权利要求1所述的方法,其中,所述响应于所述连接请求,建立所述客户端与服务端的长连接包括:

获取连接请求中的域名和请求路径;

如果所述域名未在异步线程池中加载,则根据所述域名和所述请求路径获取远程过程调用标识;

利用所述远程过程调用标识将连接请求传送给所述远程过程调用标识对应的后端服务以建立长连接;

使用异步线程池执行该域名的预加载。

4.根据权利要求3所述的方法,所述使用异步线程池执行该域名的预加载,包括:

如果所述域名未在异步线程池中加载,则获取所述域名对应的所有后端服务列表;以及

如果所述域名对应的所有后端服务列表中的至少一个后端服务未建立长连接,则对所述至少一个后端服务建立长连接。

5.根据权利要求3所述的方法,还包括:

在获取连接请求中的域名和请求路径的同时或之后,获取连接请求中的请求资源;以及

如果所述域名已在异步线程池中加载,则根据域名和请求路径获取远程过程调用调用器,并利用所述远程过程调用调用器和远程过程调用标识将请求资源请求传送给所述远程过程调用标识对应的后端服务。

6.根据权利要求1所述的方法,其中,所述过期清理包括以下任意一种或多种:

根据长连接数量进行清理、根据长连接使用次数进行清理或者根据长连接最后一次访问时间进行清理。

7.根据权利要求6所述的方法,其中,所述根据长连接数量进行清理包括:

获取保持的所有长连接;

根据长连接保持数量阈值和长连接清理比例得到清理容量;

对保持的所有长连接根据创建时间进行排序;以及

对排序后的长连接进行遍历移除直至移除的长连接个数达到所述长连接保持数量阈值与所述清理容量的差值。

8.根据权利要求6所述的方法,其中,所述根据长连接使用次数进行清理包括,对于保持的每个长连接:

如果按照时间间隔的清理策略进行过期清理,则当前时间点和最后一次进行过期清理的时间点之间的第一差值大于第一时长阈值、且长连接使用次数小于设定销毁阈值时,销毁长连接;

如果不按照时间间隔的清理策略进行过期清理,则当长连接使用次数小于设定销毁阈值时,销毁长连接;以及

如果长连接使用次数大于等于设定销毁阈值时,将当前时间点作为该长连接的最后一次进行过期清理的时间点。

9.根据权利要求6所述的方法,其中,所述根据长连接最后一次访问时间进行清理包括,对于保持的每个长连接:

获取当前时间点和最后一次访问的时间点之间的第二差值;以及如果所述第二差值大于第二时长阈值,则销毁长连接。

10.一种通信方法,所述方法包括:

对于已建立并保持的长连接,进行长连接持久化,得到长连接持久化文件,所述长连接在过期时将被清理;以及

在应用重启之后,利用所述长连接持久化文件进行长连接恢复。

11.根据权利要求10所述的方法,其中,所述进行长连接持久化,得到长连接持久化文件包括:

获取当前时间点和最后一次持久化的时间点之间的第三差值;

如果所述第三差值大于第三时长阈值,则对所有的长连接进行备份形成第一持久化文件;

如果存在原有持久化文件,则对所述原有持久化文件进行备份,得到备份持久化文件;以及

利用所述第一持久化文件代替所述原有持久化文件进行存储,如果存储失败则将所述备份持久化文件作为所述持久化文件,否则将所述第一持久化文件作为所述持久化文件。

12.根据权利要求10所述的方法,其中,所述利用所述长连接持久化文件进行长连接恢复包括:

如果指定的持久化文件路径存在持久化文件,则根据长连接使用次数和长连接最后一次访问时间对所述持久化文件中的长连接进行清理,得到第二持久化文件;以及

如果所述第二持久化文件中包含的长连接数量小于等于长连接数量阈值,则根据所述持久化文件创建长连接。

13.一种通信装置,包括:

请求接收模块,用于接收来自客户端的连接请求;

长连接建立模块,用于响应于所述连接请求,建立所述客户端与服务端的长连接;以及;以及

过期清理模块,用于对所述长连接进行过期清理。

14.根据权利要求13所述的装置,其中,所述长连接建立模块包括:

第一获取单元,用于获取连接请求中的域名、请求路径和请求资源;

第二获取单元,用于如果所述域名未在异步线程池中加载,则根据所述域名和所述请求路径获取远程过程调用标识;

第一创建单元,用于利用所述远程过程调用标识将连接请求传送给所述远程过程调用标识对应的后端服务以建立长连接;

预加载单元,用于使用异步线程池执行该域名的预加载。

15.根据权利要求14所述的装置,其中,所述预加载单元包括:

列表获取子单元,用于如果所述域名未在异步线程池中加载,则获取所述域名对应的所有后端服务列表后端服务列表;以及

预加载子单元,用于如果所述域名对应的所有后端服务列表后端服务列表中的至少一个后端服务未建立长连接,则对所述至少一个后端服务建立长连接。

16.根据权利要求14所述的装置,还包括:

资源获取模块,用于在获取连接请求中的域名和请求路径的同时或之后,获取连接请求中的请求资源;以及

资源传送模块,用于如果所述域名已在异步线程池中加载,则根据域名和请求路径获取远程过程调用调用器,并利用所述远程过程调用调用器和远程过程调用标识将请求资源请求传送给所述远程过程调用标识对应的后端服务。

17.根据权利要求13所述的装置,其中,所述过期清理模块包括以下任意一种或多种单元:

第一清理单元,用于根据长连接数量进行清理;

第二清理单元,用于根据长连接使用次数进行清理;以及

第三清理单元,用于根据长连接最后一次访问时间进行清理。

18.根据权利要求17所述的装置,其中,所述第一清理单元包括:

第一获取子单元,用于获取保持的所有长连接;

容量获取子单元,用于根据长连接保持数量阈值和长连接清理比例得到清理容量;

排序子单元,用于对保持的所有长连接根据创建时间进行排序;以及

第一销毁子单元,用于对排序后的长连接进行遍历移除直至移除的长连接个数达到所述长连接保持数量阈值与所述清理容量的差值。

19.根据权利要求17所述的装置,其中,所述第二清理单元包括:

第二销毁子单元,用于如果按照时间间隔的清理策略进行过期清理,则当前时间点和最后一次进行过期清理的时间点之间的第一差值大于第一时长阈值、且长连接使用次数小于设定销毁阈值时,销毁长连接;

第三销毁子单元,用于如果不按照时间间隔的清理策略进行过期清理,则当长连接使用次数小于设定销毁阈值时,销毁长连接;以及

时间更新子单元,用于如果长连接使用次数大于等于设定销毁阈值时,将当前时间点作为该长连接的最后一次进行过期清理的时间点。

20.根据权利要求17所述的装置,其中,所述第三清理单元包括:

第二获取子单元,用于获取当前时间点和最后一次访问的时间点之间的第二差值;以及

第四销毁子单元,用于如果所述第二差值大于第二时长阈值,则销毁长连接。

21.一种通信装置,包括:

持久化模块,用于对于已建立并保持的长连接,进行长连接持久化,得到长连接持久化文件,所述长连接在过期时将被清理;以及

恢复模块,用于在应用重启之后,利用所述长连接持久化文件进行长连接恢复。

22.根据权利要求21所述的装置,其中,所述持久化模块包括:

第三获取单元,用于获取当前时间点和最后一次持久化的时间点之间的第三差值;以及

文件形成单元,用于如果所述第三差值大于第三时长阈值,则对所有的长连接进行备份形成第一持久化文件;如果存在原有持久化文件,则对所述原有持久化文件进行备份,得到备份持久化文件;以及利用所述第一持久化文件代替所述原有持久化文件进行存储,如果存储失败则将所述备份持久化文件作为所述持久化文件,否则将所述第一持久化文件作为所述持久化文件。

23.根据权利要求21所述的装置,其中,所述恢复模块包括:

第四清理单元,用于如果指定的持久化文件路径存在持久化文件,则根据长连接使用次数和长连接最后一次访问时间对所述持久化文件中的长连接进行清理,得到第二持久化文件;以及

第二创建单元,用于如果所述第二持久化文件中包含的长连接数量小于等于长连接数量阈值,则根据所述持久化文件创建长连接。

24.一种网关,包括如权利要求13~20任一项所述的通信装置和服务配置中心,

其中,所述服务配置中心用于按域名注册该域名下所有的后端服务列表。

25.一种互联网,包括:如权利要求21~23任一项所述的通信装置、如权利要求24所述的网关和后端服务器集群,

其中,所述后端服务器集群用于提供具体业务服务。

26.一种计算设备,包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

其中,当所述一个或多个程序被所述一个或多个处理器执行时,实现根据权利要求1~12中任一项所述的方法。

27.一种计算机可读介质,其上存储有可执行指令,该指令被处理器执行时,实现根据权利要求1~12中任一项所述的方法。

技术总结

本公开提供了一种通信方法,应用于网关,所述方法包括:接收来自客户端的连接请求;响应于所述连接请求,建立所述客户端与服务端的长连接;以及对所述长连接进行过期清理。本公开还提供了一种通信装置、一种网关、一种互联网、一种计算设备以及一种计算机可读介质。

技术研发人员:潘新宇

受保护的技术使用者:北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司

技术研发日:.08.20

技术公布日:.02.28

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。