一种数据推送方法和时序控制器以及数据推送系统与流程

文档序号:18373872发布日期:2019-08-07 01:56阅读:189来源:国知局
一种数据推送方法和时序控制器以及数据推送系统与流程

本发明涉及通信技术领域,尤其涉及一种数据推送方法和时序控制器以及数据推送系统。



背景技术:

在应用程序(Application,APP)里需要展示用户数据,例如在游戏类的APP中需要展示玩家在游戏里的数据,包括玩家信息、好友列表、比赛战绩等。这些数据的产生来自游戏服务器,游戏服务器会在数据产生后推送一份给APP服务器,APP服务器再保存起来供用户查询。

游戏服务器向APP服务器推送的数据量较大时,通常采用分包的方法来推送数据,即将一个较大的数据包拆分为多个较小的数据包推送至APP服务器。APP服务器就会在极短时间内接收到来自同一个用户的多个数据包。由于APP服务器在处理每一个数据包时,都要对存储服务器进行读和写两次操作,在保存数据的时候就会遇到高并发读写冲突的问题,导致数据保存失败或数据读写效率过低,APP服务器短时间内接收到多个数据包,APP服务器要进行针对每个数据包都进行一次读写操作,而这些读操作和写操作之间的顺序是随机的,因此可能会出现读出来的数据不是所需要的数据,写入的数据覆盖了其他服务器所写的数据,这种问题称之为并发性读写冲突。

现有技术中针对并发性读写冲突的一种解决方法是采用比较并交换(Compare And Swap,CAS)操作的方法进行加锁读写。具体的,APP服务器在对存储服务器的某个位置上存储的数据进行读写操作时采用CAS操作,CAS操作包含三个操作数:内存位置、预期原值和新值。如果内存位置的值与预期原值相匹配,那么APP服务器会自动将该位置值更新为新值。否则,APP服务器不做任何操作,因此通过加锁读写的方式可以解决并发性读写冲突。

但是本发明的发明人在实现本发明的过程中发现,上述CAS操作的方式需要针对每次读写操作都进行加锁,并且还需要进行值的判断,这会导致APP服务器的数据读写效率很低,并且这种方式并无法缓解高并发的读写冲突对APP服务器造成的极大处理负荷。



技术实现要素:

本发明实施例提供了一种数据推送方法和时序控制器以及数据推送系统,能够采用无锁读写的方式解决并发性读写冲突对应用程序服务器造成的处理负荷,提高应用程序服务器的数据读写效率。

第一方面,本发明实施例提供一种数据推送方法,包括:

接收交互式应用服务器分别发送的至少两个数据包,将接收到的所述至少两个数据包分别存储到本地缓存队列中;

从所述本地缓存队列中取出第一数据包,将所述第一数据包发送给应用程序服务器,由所述应用程序服务器使用所述第一数据包与存储服务器进行读写处理;

获取在当前时刻所述应用程序服务器是否完成对所述第一数据包的读写处理;

若在当前时刻所述应用程序服务器已经完成对所述第一数据包的读写处理,从所述本地缓存队列中取出第二数据包,将所述第二数据包发送给所述应用程序服务器,由所述应用程序服务器使用所述第二数据包与所述存储服务器进行读写处理。

第二方面,本发明实施例提供一种时序控制器,包括:

数据包存储模块,用于接收交互式应用服务器分别发送的至少两个数据包,将接收到的所述至少两个数据包分别存储到本地缓存队列中;

第一发送模块,用于从所述本地缓存队列中取出第一数据包,将所述第一数据包发送给应用程序服务器,由所述应用程序服务器使用所述第一数据包与存储服务器进行读写处理;

数据推送确定模块,用于获取在当前时刻所述应用程序服务器是否完成对所述第一数据包的读写处理;

第二发送模块,用于若在当前时刻所述应用程序服务器已经完成对所述第一数据包的读写处理,从所述本地缓存队列中取出第二数据包,将所述第二数据包发送给所述应用程序服务器,由所述应用程序服务器使用所述第二数据包与所述存储服务器进行读写处理。

第三方面,本发明实施例提供一种数据推送系统,包括:交互式应用服务器、如第二方面中任一项所述的时序控制器、应用程序服务器和存储服务器,其中,

所述交互式应用服务器和所述时序控制器之间建立有通信连接,所述时序控制器和所述应用程序服务器之间建立有通信连接,所述应用程序服务器和所述存储服务器之间建立有通信连接;

所述交互式应用服务器,用于向所述时序控制器发送至少两个数据包;

所述应用程序服务器,用于接收所述时序控制器发送的第一数据包,使用所述第一数据包与所述存储服务器进行读写处理;接收所述时序控制器发送的第二数据包,使用所述第二数据包与所述存储服务器进行读写处理;

所述存储服务器,用于和所述应用程序服务器进行所述第一数据包的读写处理交互;和所述应用程序服务器进行所述第二数据包的读写处理交互。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明实施例中,交互式应用服务器并不是直接和应用程序服务器进行数据推送,交互式应用服务器发送的至少两个数据包先被存储到本地缓存队列中,然后从本地缓存队列中先取出第一数据包,该第一数据包被转发给应用程序服务器,本发明实施例中在第一数据包发送之后,需要获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,只有在当前时刻应用程序服务器已经完成对第一数据包的读写处理时,本发明实施例才会从本地缓存队列中继续取出第二数据包,该第二数据包被转发给应用程序服务器。也就是说,本发明实施例中并不改变交互式应用服务器发送多个数据包的处理方式,但是交互式应用服务器发送的多个数据包并不是同时到达应用程序服务器,而是第一数据包、第二数据包按照串行处理的方式依次发送给应用程序服务器,该应用程序服务器在第一数据包处理完成之后才会接收到第二数据包,对于应用程序服务器而言,并不是在很短时间内接收到大量数据包,因此本发明实施例可以缓解应用程序服务器的高并发的读写冲突,减少应用服务器的处理负荷。本发明实施例通过对多个数据包的时序调控,串行化地处理数据读写,以无锁的形式避免了读写冲突,提高了数据读写性能,同时也保证了数据包的完整性。

附图说明

图1为本发明实施例提供的数据推送方法的一个实施例的流程示意图;

图2为本发明实施例提供的数据推送方法的系统架构示意图;

图3为本发明实施例的数据推送系统内的一种交互流程示意图;

图4为本发明实施例的数据推送系统内的另一种交互流程示意图;

图5是本发明实施例提供的一种时序控制器的组成结构示意图;

图6是本发明实施例提供的数据推送方法应用于服务器的结构示意图;

图7是本发明实施例提供的一种数据推送系统的组成结构示意图。

具体实施方式

本发明实施例提供了一种数据推送方法和时序控制器以及数据推送系统,能够采用无锁读写的方式解决并发性读写冲突对应用程序服务器造成的处理负荷,提高应用程序服务器的数据读写效率。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。

本发明实施例应用于数据推送过程中对应用程序服务器容易产生的并发性读写冲突进行有效缓解,首先对本发明实施例提供的数据推送方法应用的系统架构进行说明,为本发明实施例的方法应用于在交互式应用服务器和应用程序服务器之间部署的时序控制器,本发明实施例改变了交互式应用服务器直接和应用程序服务器通信的方式,而是在交互式应用服务器和应用程序服务器之间配置时序控制器,用于对交互式应用服务器发送的多个数据包进行并行处理,接下来首先从时序控制器一侧对本发明实施例提供的数据推送方法进行详细说明。

本发明数据推送方法的一个实施例,请参阅图1所示,数据推送方法,可以包括如下步骤:

101、接收交互式应用服务器分别发送的至少两个数据包,将接收到的至少两个数据包分别存储到本地缓存队列中。

在本发明实施例中,交互式应用服务器产生的数据并不是直接发送给应用程序服务器。交互式应用服务器是提供源数据的服务器,在不同应用场景下,该交互式应用服务器可以有多种实现方式,举例说明如下,在游戏应用场景下,该交互式应用服务器可以是游戏服务器,在数据服务应用场景下,该交互式应用服务器具体可以为数据提供服务器,此处不做限定。

在本发明实施例中,交互式应用服务器产生至少两个数据包,交互式应用服务器不再和应用程序服务器直接相连接,交互式应用服务器和时序控制器连接,时序控制器再和应用程序服务器连接,因此当交互式应用服务器产生多个数据包时,交互式应用服务器可以将多个数据包发送给时序控制器,时序控制器可以接收交互式应用服务器分别发送的至少两个数据包,在时序控制器中配置本地缓存队列,该本地缓存队列可以保存在时序控制器的内存中,也可以保存在时序控制器的存储器中,本地缓存队列用于存储数据包,不限定的是,本地缓存队列的容量可以根据数据推送场景下数据的量级大小来确定。本发明实施例中时序控制器从交互式应用服务器接收到至少两个数据包之后,时序控制器可以将接收到的至少两个数据包分别存储到本地缓存队列中,例如时序控制器可以对至少两个数据包进行编号,然后依次存储到本地缓存队列中。

在本发明的一些实施例中,至少两个数据包是交互式应用服务器采用并发方式同时发送的,也就是说,交互式应用服务器可以采用并发的方式同时发送多个数据包,在这种应用场景下,步骤101中的将接收到的至少两个数据包分别存储到本地缓存队列中,包括:

A1、对接收到的至少两个数据包分别进行依次顺序编号,并按照编号顺序将至少两个数据包依次存储到本地缓存队列中。

其中,交互式应用服务器可以采用并发的方式同时发送多个数据包,时序控制器在接收多个数据包时可以采用依次顺序编号的方式,则时序控制器从交互式应用服务器接收到的每个数据包都具有一个唯一编号顺序,时序控制器可以根据编号顺序将至少两个数据包依次存储到本地缓存队列中。举例说明如下,当游戏服务器需要推送的数据量比较大的时候,比如掌上王者荣耀的好友关系链,一般会采用分包的方式去推送,即一个较大的数据包会拆分为多个较小的数据包,分多次推送。时序控制器就会在极短的时间内收到来自同一个用户的多个数据包,该时序控制器可以对多个数据包进行本地缓存,以免游戏服务器发送的数据包丢失。

在本发明的一些实施例中,至少两个数据包是交互式应用服务器按照相邻数据包之间的依赖顺序发送的,也就是说,交互式应用服务器向时序控制器发送多个数据包时,交互式应用服务器可以对多个数据包进行依赖关系的配置,例如,交互式应用服务器需要发送3个数据包,分别为数据包a、数据包b、数据包c,则数据包a为无依赖顺序的数据包,数据包b和数据包a之间具有依赖顺序,数据包c和数据包b之间具有依赖顺序。进一步的,该依赖顺序包括:至少两个数据包之间的优先级顺序。例如,数据包a的优先级高于数据包b的优先级,则数据包a优先被存储到本地缓存队列中。在前述的应用场景下,步骤101中的将接收到的至少两个数据包分别存储到本地缓存队列中,包括:

B1、从接收到的至少两个数据包中确定相邻数据包之间的依赖顺序,并按照相邻数据包之间的依赖顺序将至少两个数据包依次存储到本地缓存队列中。

其中,交互式应用服务器可以发送给时序控制器的多个数据包中相邻数据包具有依赖关系,时序控制器在接收多个数据包时可以先从数据包获取到该依赖顺序,则时序控制器确定多个数据包中相邻数据包具有的依赖顺序之后,时序控制器可以根据依赖顺序将至少两个数据包依次存储到本地缓存队列中。举例说明如下,游戏服务器在处理推送请求的时候,多个推送请求之间是有依赖关系的,比如掌上英雄联盟的个人综合比分最高者(Most Valuable Player,MVP)消息推送逻辑,在一场游戏比赛结束,游戏服务器会推送战局的结算数据,同时也会推送玩家结束游戏的通知。这时候游戏服务器需要先把战局结算数据计算好,把MVP信息写到数据库,然后各个用户过来查询自己是否MVP,是的话就推送消息到用户的应用程序服务器上。上述这个过程的处理次序是有要求的,需要先计算数据,再判断个人是否MVP,假如次序反过来,就会造成判断MVP失败,这种问题称之为依赖性读写冲突,在目前游戏服务器直接向应用程序服务器推送具有依赖顺序的多个请求时会导致依赖性读写冲突,并且现有技术中没有能够解决依赖性读写冲突的方案。本发明实施例中在游戏服务器和应用程序服务器并不直接相连,而是通过时序控制器相连接,该时序控制器可以实现对具有依赖顺序的多个数据包的缓存和依次向应用服务器转发,从而可以很好的解决依赖性读写冲突,详见后续步骤的举例说明。

102、从本地缓存队列中取出第一数据包,将第一数据包发送给应用程序服务器,由应用程序服务器使用第一数据包与存储服务器进行读写处理。

在本发明实施例中,时序控制器的本地缓存队列中存储有交互式应用服务器接收到的至少两个数据包之后,该本地缓存队列可以采用先入先出的方式来读取数据包,假设先从本地缓存队列中取出的数据包称为第一数据包,则时序控制器从本地缓存队列中取出第一数据包之后,时序控制器可以将第一数据包发送给应用程序服务器,由应用程序服务器使用第一数据包与存储服务器进行读写处理,例如应用程序服务器先从存储服务器中读取到原数据,然后应用程序服务器根据从时序控制器接收到的第一数据包对该原数据进行编译处理,从而得到目标数据,应用程序服务器再将该目标数据发送给存储服务器,由该存储服务器对目标数据进行存储。

103、获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理。

在本发明实施例中,从第一数据包发送给应用程序服务器之后,时序控制器可以实时判断应用程序服务器是否完成对第一数据包的读写处理,例如时序控制器在当前时刻预测应用程序服务器是否完成对第一数据包的读写处理,或者时序控制器实时的分析应用程序服务器是否完成对第一数据包的读写处理。本发明实施例中时序控制器在当前时刻进行判断应用服务器对第一数据包的处理情况,从而确定出当前时刻是否满足继续发送数据包的数据推送条件,当确定出在当前时刻应用程序服务器是否完成对第一数据包的读写处理时,触发执行步骤104执行,否则继续对第一数据包的读写处理情况进行分析,暂时不向应用程序服务器发送新的数据包,以免增大应用程序服务器的处理负荷,导致应用程序服务器的读写冲突。

在本发明的一些实施例中,步骤103获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,包括:

C1、判断当前是否接收到应用程序服务器发送的对第一数据包的处理完成消息,若接收到对第一数据包的处理完成消息,则确定在当前时刻应用程序服务器已经完成对第一数据包的读写处理,若没有接收到对第一数据包的处理完成消息,则确定在当前时刻应用程序服务器尚未完成对第一数据包的读写处理。

其中,时序控制器可以采用事件驱动的方式来获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,该事件指的是应用程序服务器发送的处理完成消息,因此时序控制器发送第二数据包可以由事件来触发,若时序控制器接收到对第一数据包的处理完成消息,则触发向应用程序服务器发送第二数据包。

举例说明如下,时序控制器首先对该至少两个数据包进行排序。为描述方便,称排序后的数据包中任意相连的两个数据包称为第一数据包和第二数据包,且第一数据包的排序先于第二数据包。例如,对至少两个数据包进行编号,其中第一数据包的编号小于第二数据包的编号。时序控制器将第一数据包发送至应用程序服务器,应用程序服务器在处理完第一数据包后,向时序控制器返回对该第一数据包处理完毕的指示。当时序控制器接收到该指示时,将第二数据包发送至应用程序服务器。

在本发明的另一些实施例中,步骤103获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,包括:

D1、将第一数据包发送给应用程序服务器的发送时间点记录为起始时刻,判断从起始时刻直至当前所经过的时间长度是否达到时长阈值,若时间长度达到时长阈值,则确定在当前时刻应用程序服务器已经完成对第一数据包的读写处理,若时间长度没有达到时长阈值,则确定在当前时刻应用程序服务器尚未完成对第一数据包的读写处理。

其中,时序控制器可以采用时间驱动的方式来获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,该时间驱动指的是两个数据包之间的发送间隔超过时长阈值,因此时序控制器发送第二数据包可以由时间来触发,若两个数据包之间的发送间隔超过时长阈值,则触发向应用程序服务器发送第二数据包。

举例说明如下,时序控制器首先对该至少两个数据包进行排序。为描述方便,称排序后的数据包中任意相连的两个数据包称为第一数据包和第二数据包,且第一数据包的排序先于第二数据包。例如,时序控制器在将第一数据包发送至应用程序服务器后,等待预置的时长阈值后再将第二数据包发送至应用程序服务器。其中,该预置的时长阈值为预先设置好在时序控制器内,该时长阈值的取值可以由时序控制器来预先配置,例如固定时长阈值为2秒,或者由用户来灵活配置时长阈值,或者可以根据应用程序服务器的处理能力来确定时长阈值,具体的,在本发明的一些实施例中,时长阈值通过如下方式确定:

获取应用程序服务器与存储服务器进行读写处理所需要的处理耗时;

选择大于或等于处理耗时的时间段作为时长阈值。

其中,该时长阈值的取值可以由时序控制器来预先配置,时长阈值可以为应用程序服务器处理一个数据包所需的处理耗时,该时长阈值可以略大于该处理耗时。

104、若在当前时刻应用程序服务器已经完成对第一数据包的读写处理,从本地缓存队列中取出第二数据包,将第二数据包发送给应用程序服务器,由应用程序服务器使用第二数据包与存储服务器进行读写处理。

在本发明实施例中,步骤103中时序控制器在当前时刻进行判断应用服务器对第一数据包的处理情况,从而确定出当前时刻是否满足继续发送数据包的数据推送条件,时序控制器获取到应用程序服务器已经完成对第一数据包的读写处理时,时序控制器可以继续向应用程序服务器发送新的数据包,即可以从本地缓存队列中取出第二数据包,将第二数据包发送给应用程序服务器,由应用程序服务器使用第二数据包与存储服务器进行读写处理,例如应用程序服务器先从存储服务器中读取到原数据,然后应用程序服务器根据从时序控制器接收到的第二数据包对该原数据进行编译处理,从而得到目标数据,应用程序服务器再将该目标数据发送给存储服务器,由该存储服务器对目标数据进行存储。

在本发明的一些实施例中,在前述执行步骤A1的实现场景下,步骤102中从本地缓存队列中取出第一数据包,包括:

E1、按照编号顺序从本地缓存队列中取出编号顺序为首位的第一数据包,本地缓存队列中取出第一数据包之后第二数据包处于编号顺序的首位。

进一步的,在执行步骤E1的实现场景下,步骤104中从本地缓存队列中取出第二数据包,包括:

F1、按照编号顺序从本地缓存队列中取出编号顺序为首位的第二数据包。

其中,交互式应用服务器采用并发的方式发送的多个数据包由时序控制器存储到本地缓存队列中,这些数据包在本地缓存队列中具有编号顺序,具体的,在本地缓存队列中编号顺序为首位的是第一数据包,当第一数据包从本地缓存队列中取出之后第二数据包处于编号顺序首位,因此时序控制器将第一数据包从本地缓存队列中取出之后,若满足数据推送条件,时序控制器从本地缓存队列中继续取出编号顺序首位的第二数据包。

在本发明的一些实施例中,在前述执行步骤A1的实现场景下,步骤102中从本地缓存队列中取出第一数据包,包括:

E2、按照相邻数据包之间的依赖顺序从本地缓存队列中取出不依赖于其它数据包的第一数据包,本地缓存队列中与第一数据包具有依赖顺序的数据包为第二数据包;

进一步的,在执行步骤E2的实现场景下,步骤104中从本地缓存队列中取出第二数据包,包括:

F2、按照相邻数据包之间的依赖顺序从本地缓存队列中取出与第一数据包具有依赖顺序的第二数据包。

其中,交互式应用服务器发送具有依赖顺序的多个数据包由时序控制器存储到本地缓存队列中,这些数据包在本地缓存队列中具有依赖顺序,具体的,在本地缓存队列中首先被取出的是没有依赖顺序的第一数据包,因此时序控制器将第一数据包从本地缓存队列中取出之后,若满足数据推送条件,时序控制器从本地缓存队列中取出与第一数据包具有依赖顺序的第二数据包。本发明实施例可以保证具有依赖顺序的多个数据包能够按照依赖顺序依次发送给应用程序服务器,避免数据包颠倒顺序导致的依赖性读写冲突。

通过前述实施例对本发明的举例说明可知,交互式应用服务器并不是直接和应用程序服务器进行数据推送,交互式应用服务器发送的至少两个数据包先被存储到本地缓存队列中,然后从本地缓存队列中先取出第一数据包,该第一数据包被转发给应用程序服务器,本发明实施例中在第一数据包发送之后,需要获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,只有在当前时刻应用程序服务器已经完成对第一数据包的读写处理时,本发明实施例才会从本地缓存队列中继续取出第二数据包,该第二数据包被转发给应用程序服务器。也就是说,本发明实施例中并不改变交互式应用服务器发送多个数据包的处理方式,但是交互式应用服务器发送的多个数据包并不是同时到达应用程序服务器,而是第一数据包、第二数据包按照串行处理的方式依次发送给应用程序服务器,该应用程序服务器在第一数据包处理完成之后才会接收到第二数据包,对于应用程序服务器而言,并不是在很短时间内接收到大量数据包,因此本发明实施例可以缓解应用程序服务器的高并发的读写冲突,减少应用服务器的处理负荷。本发明实施例通过对多个数据包的时序调控,串行化地处理数据读写,以无锁的形式避免了读写冲突,提高了数据读写性能,同时也保证了数据包的完整性。

为方便理解本发明,下面结合一个实际应用场景对本发明的基于时序调控的数据推送方法进行举例描述。

如图2所示,图2为本发明实施例提供的数据推送方法的系统架构示意图。本实施例中,数据推送系统包括游戏服务器、时序控制器、APP服务器和存储服务器。图2中,游戏服务器和APP服务器之间配置有时序控制器,在本发明解决并发性读写冲突的应用场景下,游戏服务器发送并发请求1、并发请求2、…、并发请求N给时序控制器,时序控制器接收到N个请求之后,先存储到本地缓存队列中,然后按照顺序转发请求1到N,APP服务器根据接收到的转发请求和存储服务器进行读写处理,具体可以包括读原数据以及写入目标数据。在本发明解决依赖性读写冲突的应用场景下,游戏服务器发送请求a、请求b、请求c给时序控制器,请求a是无依赖请求,请求b依赖于请求a,请求c依赖于请求b,时序控制器接收到请求a、b、c之后,先存储到本地缓存队列中,然后按照依赖关系转发请求abc,APP服务器根据接收到的转发请求和存储服务器进行读写处理,具体可以包括读原数据以及写入目标数据。

本发明实施例中,在游戏服务器和APP服务器之间增加一个时序控制器,控制器接收并发请求的推送,然后按照一定的次序(按顺序或按优先级)转发给APP服务器,保证APP服务器在读写存储服务器的时候不会发生读写冲突。具体的,时序控制器的驱动方法可以有多种,例如基于事件驱动。对于并发性读写冲突的处理:时序控制器给所有请求编号,按顺序转发,比如先转发第一个请求,确认APP服务器处理完毕后再转发第二个请求,如此类推。对于依赖性读写冲突的处理:时序控制器按照依赖顺序转发请求,比如先转发无依赖的请求,确认APP服务器处理完毕后转发依赖该项的请求,如此类推。时序控制器还可以采用基于时间驱动的方式,对于并发性读写冲突的处理:假设APP服务器处理请求的耗时为1秒,则时序控制器首先转发第一个请求,延迟1秒后转发第二个请求,延迟2秒后转发第三个请求,如此类推。对于依赖性读写冲突的处理:假设APP服务处理请求的耗时为1秒,则首先转发无依赖的请求,延迟1秒后转发依赖该项的请求,延迟2秒后转发依赖前两项的请求,如此类推。

接下来请参阅图3所示,以掌上王者荣耀、掌上英雄联盟为例,结合图2中所示的游戏服务器、时序控制器、APP服务器和存储服务器,图3中以掌上王者荣耀关系链数据推送和落地流程中采用时间驱动为例,游戏服务器在产生游戏数据的时候把数据推送给时序控制器。时序控制器采用事件驱动的方式把并发的一系列请求按一定顺序转发给APP服务器。APP服务器接收数据推送请求,向存储服务器读取原数据,通过本地编辑,再向存储服务器写入目标数据。

接下来请参阅图4所示,以掌上王者荣耀、掌上英雄联盟为例,结合图2中所示的游戏服务器、时序控制器、APP服务器和存储服务器,图4中以掌上英雄联盟MVP推送流程中采用事件驱动为例,游戏服务器在产生游戏数据的时候把数据推送给时序控制器。时序控制器采用时间驱动的方式把并发的一系列请求按一定顺序转发给APP服务器,例如时序控制器每延迟1秒发转发一个推送。APP服务器接收数据推送请求,向存储服务器读取原数据,通过本地编辑,再向存储服务器写入目标数据。

又如,游戏服务器在向APP服务器推送一个较大的数据包时,首先将该数据包拆分成三个数据包a、b、c,并将该三个数据包发送给时序控制器,其中,发送该三个数据包时可以是一起发送,也可以是依次发送,在此不作限制。时序控制器接收到数据包a、b、c后,检查该三个数据包中的数据类型是否相同。本实施例中,数据包a和数据包b的数据类型均为数据类型A,数据包c的数据类型为数据类型B。时序控制器根据本地存储的列表查询到数据类型A的优先级高于数据类型B的优先级,那么,可确定数据包的排序是a、b、c,或者是b、a、c。具体的,以排序为a、b、c为例,时序控制器首先将数据包a发送至APP服务器。APP服务器接收到数据包a后,从存储服务器中读出数据,然后根据数据包a对读出的数据进行编译,并将编译后的数据写入到存储服务器中。在读写成功后,APP服务器向时序控制器返回数据读写成功的指示。时序控制器接收到该指示后,将数据包b发送至APP服务器。APP服务器采用同样的方法处理完数据包b后,向时序控制器返回数据读写成功的指示。时序控制器接收到该指示后,将数据包c发送至APP服务器。APP服务器采用同样的方法处理完数据包b后,向时序控制器返回数据读写成功的指示。

本发明实施例中采用基于时序调控的无锁读写方法,通过对推送请求的时序调控,串行化地处理数据读写,以无锁的形式避免了读写冲突,提高了数据读写性能,同时也保证了落地的数据的完整性。

上面对本发明的数据推送方法进行了描述,下面将对本发明的时序控制器进行描述。

请参阅图5,图5为本发明的时序控制器的一个实施例的结构示意图。本实施例中,时序控制器500,包括:

数据包存储模块501,用于接收交互式应用服务器分别发送的至少两个数据包,将接收到的所述至少两个数据包分别存储到本地缓存队列中;

第一发送模块502,用于从所述本地缓存队列中取出第一数据包,将所述第一数据包发送给应用程序服务器,由所述应用程序服务器使用所述第一数据包与存储服务器进行读写处理;

数据推送确定模块503,用于获取在当前时刻所述应用程序服务器是否完成对所述第一数据包的读写处理;

第二发送模块504,用于若在当前时刻所述应用程序服务器已经完成对所述第一数据包的读写处理,从所述本地缓存队列中取出第二数据包,将所述第二数据包发送给所述应用程序服务器,由所述应用程序服务器使用所述第二数据包与所述存储服务器进行读写处理。

在本发明的一些实施例中,所述至少两个数据包是所述交互式应用服务器采用并发方式同时发送的;

所述数据包存储模块501,具体用于对接收到的所述至少两个数据包分别进行依次顺序编号,并按照编号顺序将所述至少两个数据包依次存储到本地缓存队列中。

在本发明的一些实施例中,所述第一发送模块502,具体用于按照编号顺序从所述本地缓存队列中取出编号顺序为首位的第一数据包,所述本地缓存队列中取出所述第一数据包之后第二数据包处于编号顺序的首位;

所述第二发送模块504,具体用于按照编号顺序从所述本地缓存队列中取出编号顺序为首位的第二数据包。

在本发明的一些实施例中,所述至少两个数据包是所述交互式应用服务器按照相邻数据包之间的依赖顺序发送的;

所述数据包存储模块501,具体用于从接收到的所述至少两个数据包中确定相邻数据包之间的依赖顺序,并按照所述相邻数据包之间的依赖顺序将所述至少两个数据包依次存储到本地缓存队列中。

在本发明的一些实施例中,所述第一发送模块502,具体用于按照相邻数据包之间的依赖顺序从所述本地缓存队列中取出不依赖于其它数据包的第一数据包,所述本地缓存队列中与所述第一数据包具有依赖顺序的数据包为第二数据包;

所述第二发送模块504,具体用于按照相邻数据包之间的依赖顺序从所述本地缓存队列中取出与所述第一数据包具有依赖顺序的第二数据包。

在本发明的一些实施例中,所述数据推送确定模块503,具体用于判断当前是否接收到所述应用程序服务器发送的对所述第一数据包的处理完成消息,若接收到所述对所述第一数据包的处理完成消息,则确定在当前时刻所述应用程序服务器已经完成对所述第一数据包的读写处理,若没有接收到所述对所述第一数据包的处理完成消息,则确定在当前时刻所述应用程序服务器尚未完成对所述第一数据包的读写处理。

在本发明的一些实施例中,所述数据推送确定模块503,具体用于将所述第一数据包发送给所述应用程序服务器的发送时间点记录为起始时刻,判断从所述起始时刻直至当前所经过的时间长度是否达到时长阈值,若所述时间长度达到所述时长阈值,则确定在当前时刻所述应用程序服务器已经完成对所述第一数据包的读写处理,若所述时间长度没有达到所述时长阈值,则确定在当前时刻所述应用程序服务器尚未完成对所述第一数据包的读写处理。

在本发明的一些实施例中,所述时长阈值通过如下方式确定:

获取所述应用程序服务器与所述存储服务器进行读写处理所需要的处理耗时;

选择大于或等于所述处理耗时的时间段作为所述时长阈值。

通过前述实施例对本发明的举例说明可知,交互式应用服务器并不是直接和应用程序服务器进行数据推送,交互式应用服务器发送的至少两个数据包先被存储到本地缓存队列中,然后从本地缓存队列中先取出第一数据包,该第一数据包被转发给应用程序服务器,本发明实施例中在第一数据包发送之后,需要获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,只有在当前时刻应用程序服务器已经完成对第一数据包的读写处理时,本发明实施例才会从本地缓存队列中继续取出第二数据包,该第二数据包被转发给应用程序服务器。也就是说,本发明实施例中并不改变交互式应用服务器发送多个数据包的处理方式,但是交互式应用服务器发送的多个数据包并不是同时到达应用程序服务器,而是第一数据包、第二数据包按照串行处理的方式依次发送给应用程序服务器,该应用程序服务器在第一数据包处理完成之后才会接收到第二数据包,对于应用程序服务器而言,并不是在很短时间内接收到大量数据包,因此本发明实施例可以缓解应用程序服务器的高并发的读写冲突,减少应用服务器的处理负荷。本发明实施例通过对多个数据包的时序调控,串行化地处理数据读写,以无锁的形式避免了读写冲突,提高了数据读写性能,同时也保证了数据包的完整性。

图6是本发明实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。

服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

上述实施例中由时序控制器所执行的数据推送方法的步骤可以基于该图6所示的服务器结构。

请参阅图7所示,一种数据推送系统700,包括:交互式应用服务器701、如前述图5中任一项所述的时序控制器702、应用程序服务器703和存储服务器704,其中,

所述交互式应用服务器701和所述时序控制器702之间建立有通信连接,所述时序控制器702和所述应用程序服务器703之间建立有通信连接,所述应用程序服务器703和所述存储服务器704之间建立有通信连接;

所述交互式应用服务器701,用于向所述时序控制器702发送至少两个数据包;

所述应用程序服务器703,用于接收所述时序控制器702发送的第一数据包,使用所述第一数据包与所述存储服务器704进行读写处理;接收所述时序控制器702发送的第二数据包,使用所述第二数据包与所述存储服务器704进行读写处理;

所述存储服务器704,用于和所述应用程序服务器703进行所述第一数据包的读写处理交互;和所述应用程序服务器704进行所述第二数据包的读写处理交互。

在本发明实施例提供的数据推送系统中,交互式应用服务器并不是直接和应用程序服务器进行数据推送,交互式应用服务器发送的至少两个数据包先被存储到本地缓存队列中,然后从本地缓存队列中先取出第一数据包,该第一数据包被转发给应用程序服务器,本发明实施例中在第一数据包发送之后,需要获取在当前时刻应用程序服务器是否完成对第一数据包的读写处理,只有在当前时刻应用程序服务器已经完成对第一数据包的读写处理时,本发明实施例才会从本地缓存队列中继续取出第二数据包,该第二数据包被转发给应用程序服务器。也就是说,本发明实施例中并不改变交互式应用服务器发送多个数据包的处理方式,但是交互式应用服务器发送的多个数据包并不是同时到达应用程序服务器,而是第一数据包、第二数据包按照串行处理的方式依次发送给应用程序服务器,该应用程序服务器在第一数据包处理完成之后才会接收到第二数据包,对于应用程序服务器而言,并不是在很短时间内接收到大量数据包,因此本发明实施例可以缓解应用程序服务器的高并发的读写冲突,减少应用服务器的处理负荷。本发明实施例通过对多个数据包的时序调控,串行化地处理数据读写,以无锁的形式避免了读写冲突,提高了数据读写性能,同时也保证了数据包的完整性。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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