游戏中离线数据的处理方法、装置、服务器及存储介质与流程

文档序号:32389035发布日期:2022-11-30 07:27阅读:269来源:国知局
游戏中离线数据的处理方法、装置、服务器及存储介质与流程

1.本发明涉及数据处理技术领域,尤其是涉及一种游戏中离线数据的处理方法、装置、服务器及存储介质。


背景技术:

2.在网络游戏中,服务器不仅要处理玩家登录游戏后的在线数据,还要处理玩家登出游戏后的离线数据,由于离线数据的加载与玩家本身无关,而是在需要时才从数据库中加载出来,因此离线数据的处理逻辑与在线数据的处理逻辑有所不同,为了区分在线数据和离线数据的处理流程,游戏服务器为处理离线数据的逻辑单独开设了一种服务器进程,将其称之为imserver进程。
3.然而,在离线数据的计算数据量较大时,导致imserver进程针对该离线数据的结算行为持续较长时间,从而致使imserver进程无法按时向游戏服务器中主控制进程发送状态同步消息,主控制进程将imserver进程标记为已掉线状态,并将imserver进程从服务器进程集合中移除,imserver进程将无法继续处理离线数据,进而导致离线数据所对应的系统和玩法无响应,影响玩家游戏体验。


技术实现要素:

4.有鉴于此,本发明的目的在于提供一种游戏中离线数据的处理方法、装置、服务器及存储介质,可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的系统和玩法无响应的情况,从而显著改善了玩家的游戏体验。
5.第一方面,本发明实施例提供了一种游戏中离线数据的处理方法,所述方法应用于游戏服务器中的消息转发器,所述游戏服务器配置有多个候选离线数据处理进程,所述方法包括:获取待处理离线数据;从所述候选离线数据处理进程中确定目标离线数据处理进程;向所述目标离线数据处理进程发送所述待处理离线数据对应的注册消息,以通过所述目标离线数据处理进程对所述待处理离线数据进行数据处理。
6.在一种实施方式中,所述从所述候选离线数据处理进程中确定目标离线数据处理进程的步骤,包括:判断所述候选离线数据处理进程已绑定的第一数据结构中是否存在所述待处理离线数据对应的数据结构;如果是,将所述待处理离线数据对应的数据结构绑定的候选离线数据处理进程,确定为目标离线数据处理进程;如果否,生成所述待处理离线数据对应的第二数据结构,并基于每个所述候选离线数据处理进程已绑定的所述第一数据结构,从所述候选离线数据处理进程中确定目标离线数据处理进程。
7.在一种实施方式中,所述基于每个所述候选离线数据处理进程已绑定的所述第一数据结构,从所述候选离线数据处理进程中确定目标离线数据处理进程的步骤,包括:基于每个所述候选离线数据处理进程已绑定的所述第一数据结构,确定每个所述候选离线数据处理进程的当前空闲状态;根据所述当前空闲状态,从所述候选离线数据处理进程中确定目标离线数据处理进程。
8.在一种实施方式中,所述基于每个所述候选离线数据处理进程已绑定的所述第一数据结构,确定每个所述候选离线数据处理进程的当前空闲状态的步骤,包括:确定每个所述候选离线数据处理进程已绑定的所述第一数据结构的结构总量;根据每个所述候选离线数据处理进程对应的所述结构总量,确定每个所述候选离线数据处理进程的当前空闲状态。
9.在一种实施方式中,所述基于每个所述候选离线数据处理进程已绑定的所述第一数据结构,确定每个所述候选离线数据处理进程的当前空闲状态的步骤,还包括:对于每个所述候选离线数据处理进程,获取该候选离线数据处理进程已绑定的每个所述第一数据结构对应的权重参数,并基于每个所述第一数据结构对应的权重参数,计算该候选离线数据处理进程对应的权重总和;根据每个所述候选离线数据处理进程对应的所述权重总和,确定每个所述候选离线数据处理进程的当前空闲状态。
10.在一种实施方式中,所述向所述目标离线数据处理进程发送所述待处理离线数据对应的注册消息,以通过所述目标离线数据处理进程对所述待处理离线数据进行数据处理的步骤,包括:建立所述第二数据结构中的数据标识符与所述目标离线数据处理进程之间的绑定关系;基于所述绑定关系向所述目标离线数据处理进程发送所述待处理离线数据对应的注册消息,以通过所述目标离线数据处理进程从所述第二数据结构中的数据标识符和数据类型对应的数据存储地址,拉取所述待处理离线数据,并对所述待处理离线数据进行数据处理。
11.在一种实施方式中,所述方法还包括:如果接收到针对于所述待处理离线数据的注销消息,删除所述待处理离线数据对应的数据结构与所述目标离线数据处理进程之间的绑定关系。
12.在一种实施方式中,所述方法还包括:如果接收到针对于所述待处理离线数据的修改消息,将所述修改消息发送至所述目标离线数据处理进程,以通过所述目标离线数据处理进程基于所述修改消息对所述待处理离线数据进行修改处理。
13.在一种实施方式中,所述消息转发器配置有消息队列,所述消息队列存入有至少一个待处理离线数据;所述方法还包括:如果接收到所述目标离线数据处理进程针对所述待处理离线数据的反馈消息,从所述消息队列中确定下一待处理离线数据;从所述候选离线数据处理进程中,确定所述下一待处理离线数据绑定的下一目标离线数据处理进程;向所述下一目标离线数据处理进程发送所述下一待处理离线数据对应的注册消息,以通过所述下一目标离线数据处理进程对所述下一待处理离线数据进行数据处理。
14.在一种实施方式中,所述游戏服务器还配置有主控制进程,所述方法还包括:如果接收到所述主控制进程发送的进程移除消息,从所述候选离线数据处理进程中确定所述进程移除消息对应的待移除离线数据处理进程;其中,所述进程移除消息是所述主控制进程在预设时长内,未接收到所述待移除离线数据处理进程的状态同步消息时生成的;确定与所述待移除离线数据处理进程绑定的每个第一数据结构;对于所述待移除离线数据处理进程绑定的每个所述第一数据结构,从除所述待移除离线数据处理进程之外的候选离线数据处理进程中,确定该第一数据结构对应的目标迁移离线数据处理进程;向所述目标迁移离线数据处理进程发送该第一数据结构对应的注册消息,以通过所述目标迁移离线数据处理进程对该第一数据结构对应的离线数据进行数据处理。
15.第二方面,本发明实施例还提供一种游戏中离线数据的处理装置,所述装置应用于游戏服务器中的消息转发器,所述游戏服务器配置有多个候选离线数据处理进程,所述装置包括:数据获取模块,用于获取待处理离线数据;进程确定模块,用于从所述候选离线数据处理进程中确定目标离线数据处理进程;消息发送模块,用于向所述目标离线数据处理进程发送所述待处理离线数据对应的注册消息,以通过所述目标离线数据处理进程对所述待处理离线数据进行数据处理。
16.第三方面,本发明实施例还提供一种服务器,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现第一方面提供的任一项所述的方法。
17.第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现第一方面提供的任一项所述的方法。
18.本发明实施例提供的一种游戏中离线数据的处理方法、装置、服务器及存储介质,应用于游戏服务器中的消息转发器,游戏服务器配置有多个候选离线数据处理进程,首先获取待处理离线数据,并从候选离线数据处理进程中确定目标离线数据处理进程,最后向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理。上述方法在游戏服务器中开设多个候选离线数据处理进程,从而将离线数据分散到各个候选离线数据处理进程,在待处理离线数据对应的注册消息发送至目标离线数据处理进程后,可通过目标离线数据处理进程对待处理离线数据进行数据处理,因此单个目标离线数据处理进程的负载量较小,本发明实施例可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的系统和玩法无响应的情况,从而显著改善了玩家的游戏体验。
19.本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
20.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
21.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1为本发明实施例提供的一种游戏中离线数据的处理方法的流程示意图;
23.图2为本发明实施例提供的一种索引表示意图;
24.图3为本发明实施例提供的一种消息传递示意图;
25.图4为本发明实施例提供的另一种消息传递示意图;
26.图5为本发明实施例提供的一种消息队列的示意图;
27.图6为本发明实施例提供的另一种消息传递示意图;
28.图7为本发明实施例提供的一种游戏中离线数据的处理装置的结构示意图;
29.图8为本发明实施例提供的一种服务器的结构示意图。
具体实施方式
30.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
31.目前,由于现有的技术方案中,imserver进程为单开进程,imserver进程不仅用于处理玩家相关的离线数据,也用于处理一些全服唯一的业务。由于imserver进程只开设了一个,在上面实现的游戏逻辑会保证业务的有序性和唯一性。在此基础上,现有离线数据处理进程极易出现因负载过高无响应而导致的系统和玩法无响应的情况。
32.例如,由于离线数据的逻辑都实现在imserver进程上,因此所有的帮会和帮会成员操作都由单开的imserver进程来处理,假设某网络游戏服务器的注册玩家有40万,游戏中设置单个帮会最大人数为150人,则极限状态下一个服务器的帮会数量有2600个,由于帮会数据本身需要一些定时处理,如整点结算需要给所有帮会成员分发奖励等,当到达目标时间点时,imserver进程上的所有帮会同时开始结算操作,即同时对2600个帮会和40万玩家的数据进行计算。由于计算的数据量较大,整个结算行为会持续很长一段时间,导致imserver进程无法在该段时间内向主控制进程发送状态同步消息(也即,心跳包),主控制进程接收不到imserver进程发送的状态同步消息时,会将imserver进程标记为已掉线状态,主控制进程会主动将imserver进程从服务器进程集合中移除,并不再监听来自imserver进程的消息。
33.另外,除了帮会和帮会成员数据量较大可能导致的imserver进程掉线,同一时间点大批量操作玩家个人离线数据也有可能导致imserver进程掉线。例如,玩家的邮件数据属于离线数据,当某个游戏业务需要给指定的大量玩家发邮件时,同样会导致imserver进程卡在单个发邮件的步骤里出不来,无法向主控制进程发送状态同步消息,进而导致主控制进程主动将imserver进程踢出进程集合,imserver进程上的游戏业务停滞,将无法接收或发出消息。
34.基于此,本发明实施提供了一种游戏中离线数据的处理方法、装置、服务器及存储介质,可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的系统和玩法无响应的情况,从而显著改善了玩家的游戏体验。
35.为便于对本实施例进行理解,首先对本发明实施例所公开的一种游戏中离线数据的处理方法进行详细介绍,方法应用于游戏服务器中的消息转发器(messageswitcher),游戏服务器配置有多个候选离线数据处理进程(也可以称之为,候选imserver进程),参见图1所示的一种游戏中离线数据的处理方法的流程示意图,该方法主要包括以下步骤s102至步骤s106:
36.步骤s102,获取待处理离线数据。其中,待处理离线数据也即玩家登出游戏时产生的数据,诸如奖励结算数据(帮会奖励结算或个人奖励结算等),家园数据、社交数据、帮会数据等。
37.示例性的,对于社交性较强的网络游戏,除了需要维护玩家的个人数据,还会新产生一种由多个玩家组成的组织结构(诸如,帮会)。一份帮会数据里,不仅仅有帮会自身相关信息,如帮会等级、帮会资金等属性,还会有帮会里所有成员的相关信息,即帮会成员数据,通常一个帮会的成员人数达100人以上。帮会数据的变化和多个成员的操作相关,当a玩家和b玩家处于同个帮会时,即使a玩家不在线,b玩家的操作也会修改帮会数据;同理,当玩家不在线时,帮会自身也会进行资金维护,分发奖励等操作,所以帮会和帮会成员数据都属于离线数据。
38.另外,离线数据通常和多个玩家相关,即a玩家的操作会影响b玩家的数据,例如,a玩家向b玩家发出好友申请,但b玩家不在线,此时就需要给b玩家的好友申请列表里加上a玩家的信息,这里b玩家的好友申请列表即为一份离线数据。
39.步骤s104,从候选离线数据处理进程中确定目标离线数据处理进程(也可以称之为,目标imserver进程)。在一种实施方式中,可以判断待处理离线数据是否已注册候选离线数据处理进程,如果是,则可以将已注册的候选离线数据处理进程确定为目标离线数据处理进程;如果否,则可以根据各个候选离线数据处理进程的当前空闲状态选择目标离线数据处理进程。
40.步骤s106,向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理。其中,注册消息用于指示目标离线数据处理进程对待处理离线数据进行数据处理,具体数据处理逻辑与待处理离线数据的数据类型相关。在一种实施方式中,可以建立目标离线数据处理进程与待处理离线数据对应的数据结构之间的绑定关系,再向目标离线数据处理进程发送相应的注册消息,以通过目标离线数据处理进程处理待处理离线数据。
41.本发明实施例提供的游戏中离线数据的处理方法,在游戏服务器中开设多个候选离线数据处理进程,从而将离线数据分散到各个候选离线数据处理进程,在待处理离线数据对应的注册消息发送至目标离线数据处理进程后,可通过目标离线数据处理进程对待处理离线数据进行数据处理,因此单个目标离线数据处理进程的负载量较小,本发明实施例可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的系统和玩法无响应的情况,从而显著改善了玩家的游戏体验。
42.在实际应用中,游戏服务器是由一组服务器进程组成的,其中主控制进程称为masterserver,用于控制和维护加入到本组服务器里的所有进程状态,其他进程根据功能不同,会区分为两大类,一类是多开的进程,这类进程节点可以同时处理相同逻辑的业务,用于分散业务压力;另一类是单开的进程,这类进程节点主要用于处理全服唯一的业务,用于保证业务的有序性和唯一性。对于非masterserver的进程节点,会每隔n秒给masterserver发送一条消息(15《=n《=30),表示自己处于正常工作状态,masterserver会每隔n秒检查是否收到了各个进程的消息。如果有n秒未收到某进程的状态更新,masterserver会发出报警,表示需要监控该进程的状态;如果有持续2n的时长未收到该进程的状态更新,masterserver会主动将该进程从整个服务器进程集合中移除。服务器进程之间的通信,会使用已经封装好的消息转发器,消息转发器会根据需要接收消息的目标对象,找到该对象注册在哪个进程上,然后将消息转发给目标进程。目标进程收到消息后对指定对象做进一步的处理。
43.另外,导致imserver进程被移出服务器进程集合的原因,就是单开的进程无法处理数据量较大的业务。在现有的服务器架构中,对于数据量较大,业务逻辑较多的操作,往往会用多开的进程来实现,例如网络游戏服务器会将处理在线玩家数据的logicserver进程同时开启多个,通过logicserver进程处理在线玩家的操作,每当有玩家登陆时,就将玩家的唯一标识id(identity document,身份标识号),即playerid,和某个指定的logicserver进程绑定,由于logicserver进程开启了多个,不同玩家的数据会分散在不同的logicserver进程上,彼此之间的操作互不影响,当玩家下线后,绑定在logicserver进程上的playerid会移除掉,当玩家下次再登录时,会重新给他找一个logicserver进程进行绑定。虽然在线玩家的数据量较大,但由于分散在了不同的logicserver进程上,单个logicserver进程的负载量并不大;再例如dbserver进程用来处理数据存盘的操作,需要存储的数据量虽然大,但由于被存盘数据已经根据唯一标识分发给了不同的dbserver进程,单个dbserver是可以胜任分给它的存盘任务的。
44.在此基础上,本发明实施例提出游戏服务器中配置有多个候选imserver进程,相较于现有技术中只开启一个imserver进程,本发明实施例扩展为同时开启多个imserver进程,并支持imserver进程的动态新增和减少。当imserver进程扩展为多个进程后,离线数据业务会平均的分散到各个imserver进程上,单个imserver进程的负载量将显著降低,并且由于可以动态新增imserver进程,当监控到有imserver进程负载较高时,即可动态加开新的imserver进程,以平衡整体负载。
45.为便于理解,本发明实施例提供了一种前述步骤s104的实施方式,参见如下步骤1至步骤3:
46.步骤1,判断候选离线数据处理进程已绑定的第一数据结构中是否存在待处理离线数据对应的数据结构。如果是,执行步骤2;如果否,执行步骤3。其中,数据结构为预先定义的通用数据结构,简称imobject,imobject包括imobjectid和imobjecttype,imobjectid也即真实数据结构里的唯一标识符id,imobjecttype也即真实数据结构的分类标识,诸如帮会、家园、好友关系、玩家个人离线数据等,第一数据结构也即已与候选imserver进程绑定的数据结构,简称第一imobject。在一种实施方式中,在接收到待处理离线数据的消息时,会在每个候选imserver进程绑定的第一数据结构中查找,以判断该待处理离线数据对应的数据结构是否已经存在。
47.步骤2,如果是,将待处理离线数据对应的数据结构绑定的候选离线数据处理进程,确定为目标离线数据处理进程。在一种实施方式中,如果可以查找到待处理离线数据对应的数据结构,则确定该数据结构中imobjectid绑定的候选imserver进程,将该候选imserver进程作为目标imserver进程。
48.步骤3,如果否,生成待处理离线数据对应的第二数据结构,并基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程。其中,第二数据结构也由通用的imobject定义而得,但由于尚未分配目标imserver进程给它,故简称第二imobject。在生成了第二imobject之后,需要在所有的候选imserver进程里找出相对空闲的imserver进程,作为目标imserver进程,并向该目标imserver进程发送待处理离线数据对应的注册消息。当第二数据结构和某个唯一的imserver进程绑定之后,第二数据结构成为了一个完整的imobject,其本质与第一数据结构无差别。此时第二数
据结构的数量和权重可以参与候选imserver进程空闲状态的判定。另外,在判定候选imserver进程的空闲状态时,候选imserver进程已绑定的第一imobject的数量或权重参数可以体现候选imserver进程的当前空闲程度,从而基于该当前空闲程度选择相对空闲的候选imserver进程作为目标imserver进程。
49.对于上述步骤3,本发明实施例进一步提供了一种基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程的实施方式,参见如下步骤3.1至步骤3.2:
50.步骤3.1,基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态。本发明实施例提供了一些确定候选imserver进程的实施方式,参见如下方式一至方式二:
51.方式一:在游戏运营前期或游戏玩法数量较少时,可以基于第一数据结构的数量确定目标离线数据处理进程。具体的,可以确定每个候选离线数据处理进程已绑定的第一数据结构的结构总量,再根据每个候选离线数据处理进程对应的结构总量,确定每个候选离线数据处理进程的当前空闲状态。其中,结构总量与当前空闲状态呈负相关,结构总量越大表明候选imserver进程的当前空闲状态越差,反之,结构总量越小表明候选imserver进程的当前空闲状态越优。示例性的,可以在所有候选imserver进程中,选择已注册第一imobject的结构总量最少的候选imserver进程作为目标imserver进程。
52.方式二:在游戏运营中后期,由于已经积累了一定玩法数据,对于各种类型的imobject可能接收的消息数量有了预判,在注册新的imobject时可以新增一个权重参数,即imobjectweight,在messageswitcher里的每个候选imserver进程上维护一个权重总和,当有新的imobject注册或注销时,权重总和相应的增加或减少,从而可以基于第一数据结构的权重参数确定目标离线数据处理进程。具体的,对于每个候选离线数据处理进程,获取该候选离线数据处理进程已绑定的每个第一数据结构对应的权重参数imobjectweight,并基于每个第一数据结构对应的权重参数,计算该候选离线数据处理进程对应的权重总和,再根据每个候选离线数据处理进程对应的权重总和,确定每个候选离线数据处理进程的当前空闲状态。其中,权重总和与当前空闲状态呈负相关,权重总和越大表明候选imserver进程的当前空闲状态越差,反之,权重总和越小表明候选imserver进程的当前空闲状态越优。示例性的,可以将当前权重总和最小的候选imserver进程分配给新的imobject。按权重分配的策略适用于有较大体量的imobject的情况,例如帮会对象,在帮会活动开启时,较活跃的帮会对象会收到更多的消息,因此在服务器启动时就按帮会的活跃度计算出权重,并将高度活跃的帮会分散在不同的imserver进程,有助于各个imserver进程的负载均衡。
53.步骤3.2,根据当前空闲状态,从候选离线数据处理进程中确定目标离线数据处理进程。在一种实施方式中,可以选择相对空闲的候选imserver进程作为目标imserver进程。示例性的,可以选择结构总量最小的候选imserver进程作为目标imserver进程,或者可以选择权重总和最小的候选imserver进程作为目标imserver进程。
54.在前述实施例的基础上,本发明实施例提供了一种前述步骤s106的实施方式,参见如下步骤a至步骤b:
55.步骤a,建立第二数据结构中的数据标识符与目标离线数据处理进程之间的绑定关系。在一种实施方式中,可以在messageswitcher里定义一个索引表,将每个唯一的
imobject绑定到唯一的imserver进程上,从而可以通过imobject(id,type)来索引到唯一的imserver进程,诸如图2所示的一种索引表示意图,示例性的,imobject(key:pid,type:relationship)与imserver进程1绑定,imobject(key:gid,type:gulid)与imserver进程2绑定,imobject(key:fid,type:friendship)与imserver进程3绑定。在一种可选的实施方式中,该索引表支持注册和注销。
56.步骤b,基于绑定关系向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程从第二数据结构中的数据标识符和数据类型对应的数据存储地址,拉取待处理离线数据,并对待处理离线数据进行数据处理。其中,数据存储地址包括全局缓存地址或数据库地址。
57.考虑到消息转发器最终编译出来的dll需要加载到进程里才能运行,而主控制进程masterserver作为一个单开的服务器进程,它的逻辑层不仅维护了所有进程的状态信息,也保留了所有在线玩家的账号信息,因此优选将messageswitcher绑定在masterserver上。在具体实现时,可以将masterserver和messageswitcher看成一个整体,进程之间的消息,都是先转发给masterserver,再转发给目标imserver进程。而对于masterserver来说,它的上层是处理游戏业务的逻辑层,底层绑定的messageswitcher的dll文件则负责处理消息转发。应当注意的是,理论上可以将messageswitcher绑定给任意一个单开的进程。
58.当messageswitcher在索引表里找不到待处理离线数据对应的imobject对象时,就表示为新的待处理离线数据,需要为待处理离线数据创建一个新的imobject对象,并分配一个目标imserver进程。在网络层创建imobject对象仅仅是为了记录待处理离线数据和目标imserver进程的一一对应关系,具体的游戏业务逻辑还是实现在目标imserver进程上的,因此在选定了目标imserver进程后,需要通知目标imserver进程有一个新的imobject注册,以使目标imserver进程执行初始化操作,具体初始化方式可以由目标imserver进程根据imobject的数据类型判断。
59.当目标imserver进程接收到imobject需要注册的消息后,会根据imobject的数据类型确定其所属业务数据,从而根据其所属业务数据判断是从全局缓存中加载待处理离线数据,还是从数据库里拉取待处理离线数据。示例性的,加载数据的方式是由imobjectid和imobjecttype共同决定的:对于读取频率较高的数据,如帮会数据,所有帮会成员都有可能去读取和修改,如果帮会里活跃玩家较多,则读写频率更高,那这一类的数据在服务器启动时,就会从数据库里加载出来,并将他们存入全局缓存;对于读取频率较低的数据,如玩家的好友关系数据,仅表示玩家a和玩家b之间的关系,只有在a或b在线的时候才有可能去读取和修改,这一类的数据,会在玩家a或b登录的时候,再去从数据库里拉取。在实际应用中,imobjecttype用来判定是哪种加载方式,imobjectid用来去具体的数据表或全局缓存里找到指定的数据。
60.另外,目标imserver进程对待处理离线数据进行数据处理时,操作离线数据的具体业务逻辑没有放在messageswitcher里,而是放在游戏逻辑层来实现。不同的游戏服务器架构对于游戏逻辑层可能会采用不同的实现方式,例如使用脚本语言lua或python来实现。将messageswitcher和游戏逻辑层分开的原因在于:前者需要转发大量消息,需要更快捷;后者需要在线更新功能,需要方便热更新。对游戏逻辑层的单个进程来说,当收到messageswitcher转发过来的消息后,会去判断是否为imobject对应的消息,再根据
imobject的类型,去做不同的处理,如在好友列表里新增一个id,将整个好友数据存盘等等。
61.在实际应用中,当imobject被标记注册在目标imserver进程上之后,与该imobject相关的写入,均只在目标imserver进程上执行。其他imserver进程可以从全局缓存中拉取相关的离线数据做展示,但如果涉及到imobject的修改和写入,则需要转发给该imobject所注册的目标imserver进程来操作。基于此,本发明实施例还提供了一种修改待处理离线数据的实施方式,具体的:如果接收到针对于待处理离线数据的修改消息,将修改消息发送至目标离线数据处理进程,以通过目标离线数据处理进程基于修改消息对待处理离线数据进行修改处理。参见图3所示的一种消息传递示意图,imserver进程1向masterserver发送请求修改imobject2的消息,masterserver转发消息给imobject2,messageswitcher得到imobject2绑定在imserver进程2上,masterserver转发消息给imserver进程2,imserver进程2修改imobject2,并通知imserver进程1更新数据。图3还示意出,imserver进程1可从全局数据缓存redis中请求imobject1数据,仅用于展示,全局数据缓存redis向imserver进程1反馈imobject1。
62.在另一种实施方式中,当messageswitcher收到需要转发的消息时,先在已有的索引表里寻找imobjectid,如果找到就直接读取它所对应的目标imserver进程,将消息转发过去即可。如果没有,说明当前imobject需要新注册,则自动去寻找所有候选imserver进程中相对空闲的候选imserver进程,将相对空闲的候选imserver进程与该imobject绑定。绑定完之后,要主动通知该imserver进程有一个新的imobject需要注册。通知完注册消息之后,再转发原本需要转发的那条消息。在实际应用中,需要转发的消息中很大一部分是指imserver进程1想修改与imserver进程2绑定的imobject2。转发此类消息是为了保证只有唯一的一个imserver进程可以去修改某个imobject,以免多个imserver进程同时修改而导致数据不一致。此外,在需要一次性读取大量缓存数据的时候,也可以让imobject所注册的imserver进程去操作,以减少全局缓存数据的读取。例如,某个帮会和帮会成员数据注册在imserver进程1上,当imserver进程2需要读取该帮会的100个成员数据时,它如果从全局缓存中读取,需要取100次,但如果将读取操作转发给imserver进程1去执行,由于帮会和帮会成员数据本身就注册在imserver进程1上,直接从imserver进程1进程的内存里就能取得到,此时将无需读100次全局缓存。
63.示例性的,参见图4所示的另一种消息传递示意图,imserver进程1转发imobject消息,masterserver通知messageswitcher寻找imobject对应的imserver进程,当未找到imobject对应的imserver进程时需要先注册,此时masterserver通知imserver进程2存在待注册的imobject,注册完成后再向imserver进程2转发imobject消息。
64.在一种实施方式中,本发明实施例还提供了一种注销待处理离线数据的实施方式,具体的:如果接收到针对于待处理离线数据的注销消息,删除待处理离线数据对应的数据结构与目标离线数据处理进程之间的绑定关系。当收到注销某个imobject的消息时,会删除该imobject和目标imserver进程之间的绑定关系,下次同个imobject再来注册时,再分配一个新的目标imserver进程。在实际应用中,当需要注销某个imobject时,先删除imserver进程上记录的这个imobject,再将这个imobject对象本身销毁。当注销操作执行后,无法再通过imobject的id来找到一个已经存在的imobject对象。应当注意的是,在注册
新的imobject对象时,需要先发送imobject需要注册的消息给目标imserver进程,再转发原消息,如果调换了顺序,目标imserver进程收到消息后,判定当前进程上没有此imobject,将扔掉原消息。
65.在一种实施方式中,消息转发器配置有消息队列,消息队列存入有至少一个待处理离线数据,在此基础上,如果接收到目标离线数据处理进程针对待处理离线数据的反馈消息,从消息队列中确定下一待处理离线数据,此时可以从候选离线数据处理进程中,确定下一待处理离线数据绑定的下一目标离线数据处理进程,并向下一目标离线数据处理进程发送下一待处理离线数据对应的注册消息,以通过下一目标离线数据处理进程对下一待处理离线数据进行数据处理。参见图5所示的一种消息队列的示意图,对于每个imobject,在messageswitcher里要给它创建一个消息队列。当有多条消息需要转发给某个imobject时,这些消息会依次存入到指定的消息队列里。每次仅给imserver进程发出一条消息,当imserver进程处理完前一条消息后,会发个反馈给messageswitcher,messageswitcher在收到反馈之后,才去转发下一条消息。这样可以确保不同imobject的消息互不影响,且保证同一个对象的消息转发有序。
66.在另一种实施方式中,本发明实施例还提供了一种移除imserver进程的实施方式,具体的,参见如下(1)至(4):
67.(1)如果接收到主控制进程发送的进程移除消息,从候选离线数据处理进程中确定进程移除消息对应的待移除离线数据处理进程。其中,进程移除消息是主控制进程在预设时长内,未接收到待移除离线数据处理进程的状态同步消息时生成的。在实际应用中,如果有imserver进程无响应,也即masterserver检测不到该imserver进程的心跳包,该imserver进程即为待移除离线数据处理进程,masterserver会将该imserver踢出服务器进程集合,并通知messageswitcher。示例性的,参见图6所示的另一种消息传递示意图,masterserver每隔15秒检测imserver进程1的心跳包,如果imserver进程1超过30秒无响应,则确定imserver进程1掉线无响应,masterserver通知messageswitcher注销imserver进程1。
68.(2)确定与待移除离线数据处理进程绑定的每个第一数据结构。请继续参见图6,messageswitcher收到imserver被移除的消息后,会先去找到注册在该imserver进程上的所有第一imobject。如图示有两个imobject已注册绑定imserver进程1,分别是imobject(key:pid,type:relationship)和imobject(key:gid,type:guild)。
69.(3)对于待移除离线数据处理进程绑定的每个第一数据结构,从除待移除离线数据处理进程之外的候选离线数据处理进程中,确定该第一数据结构对应的目标迁移离线数据处理进程。在一种实施方式中,messageswitcher会依次为每个第一imobject寻找新的imserver进程,该新的imserver进程也即目标迁移离线数据处理进程。请继续参见图6,messageswitcher为imobject(key:pid,type:relationship)找到了正常运行中的imserver进程2作为目标迁移进程;为imobject(key:gid,type:guild)找到了正常运行中的imserver进程3作为目标迁移进程。
70.(4)向目标迁移离线数据处理进程发送该第一数据结构对应的注册消息,以通过目标迁移离线数据处理进程对该第一数据结构对应的离线数据进行数据处理。请继续参见图6,masterserver向imserver进程2请求注册imobject(key:pid,type:relationship),以
将其迁移绑定到imserver进程2,同理,masterserver向imserver进程3请求注册imobject(key:gid,type:guild),以将其迁移绑定到imserver进程3。在具体实现时,可参见前述实施例,本发明实施例对此不再进行赘述。
71.综上所述,本发明实施例的核心思路在于以下三点:
72.第一,将各种类型的离线数据抽象成统一的imobject对象。在其他的游戏服务器架构中,如果要处理不同种类的离线数据对象,会开设不同的专有进程。例如,开启专用的messageserver进程,用于处理玩家之间的聊天信息;开启专用的playserver进程,用于处理某个特定的玩法;开设专用的guildserver进程,用于处理所有的帮会数据。本发明不再根据离线数据结构的类型来开设不同的进程,而是统一开设多个imserver进程,各种类型的离线数据结构都可以在任意一个imserver上得到处理。
73.第二,将imobject的注册和转发封装起来。对于游戏业务逻辑层来说,想要处理离线数据对象,需要先在imserver上注册该对象,然后再进行处理。在imserver变成多开进程之后,则需要先找到imobject存在于哪个imserver上,然后再将消息转发给指定的imserver进行处理。本发明将imobject的注册和转发封装到了网络层的消息转发器(以下简称:messageswitcher)里。对于messageswitcher来说,它不用关注这个imobject对象是什么类型,也不关心它的具体实现方式。每当有新的imobject消息来到时,先去检查是否已经给这个imobject分配了对应的imserver,如果没有,就去寻找一个相对空闲的imserver,并通知该imserver即将有一个imobject会注册进来,在通知了注册之后,再转发原本需要转发的imobject消息。如果messageswitcher里已经有这个imobject的注册记录,则直接读取它对应的imserver,并将这条消息转发给这个imserver。
74.第三,将imserver进程由只开一个,扩展为开设多个,并支持imobject的自动迁移。本发明所描述的服务器架构,在服务器集群启动时,就预先设定好要开设的imserver进程数量;在服务器运行期间,如果发现当前开设的imserver进程太少,不足以支撑游戏业务,可以动态增开新的imserver加入已有的服务器集群;如果有某个imserver的负载过高,或由于某些原因导致它被踢出了服务器集群,则之前注册在它上面的imobject会自动迁移到其他仍在正常运行的imserver上。
75.本发明实施例所提供的游戏中离线数据的处理方法,是一种通用的离线数据多进程框架,解决了原有服务器架构无法处理大批量离线数据的问题。由于多种类型的离线数据结构都可以加载在同个imserver上,增加了单个imserver的使用效率;由于服务器支持动态新增imserver进程,运维人员可以实时监控各个服务器进程的运行状态,及时调整imserver进程的数量;由于服务器支持imobject的自动迁移,即使某个imserver进程负载过高无响应,注册在它上面的imobject在短暂的自动迁移完成之后,即可继续处理游戏逻辑,不会导致玩家操作离线系统和玩法时无响应,影响游戏体验。
76.对于游戏业务逻辑开发人员来说,将imobject的注册和转发封装到messageswitcher里之后,开发人员不需要再关注这个imobject是何时注册、在哪里注册的,而是直接将需要操作某个imobject的消息转发出去即可。由于messageswitcher里限制了收到消息的只能是注册过该对象的imserver,所以只会有一个imserver可以处理这个imobject,确保了数据的唯一性。
77.此外,对于大部分网络游戏都有的全局玩法,原先的架构要么是将所有的全局玩
法统一注册在某个固定的服务器进程上(有的架构则是直接写在了masterserver上);要么给某些特别重要的全局玩法单独开设一个进程。现在由于imserver可以处理所有的离线数据对象,因此不需要再单独维护某些特定的玩法进程了,只要在起服时,将各个全局单点的系统和玩法分散注册到各个imserver上即可。对于单个imserver来说,它既可以充当全局系统和玩法的中央控制层,也可以充当接受中央控制层消息的业务逻辑层。相对于其他将全局系统和玩法都写在masterserver或单开进程上的做法,该框架减少了masterserver和对应单开进程的压力,并增强了系统的可移植性。
78.对于前述实施例提供的游戏中离线数据的处理方法,本发明实施例提供了一种游戏中离线数据的处理装置,该装置应用于游戏服务器中的消息转发器,游戏服务器配置有多个候选离线数据处理进程,参见图7所示的一种游戏中离线数据的处理装置的结构示意图,该装置主要包括以下部分:
79.数据获取模块702,用于获取待处理离线数据;
80.进程确定模块704,用于从候选离线数据处理进程中确定目标离线数据处理进程;
81.消息发送模块706,用于向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理。
82.本发明实施例提供的游戏中离线数据的处理装置,在游戏服务器中开设多个候选离线数据处理进程,从而将离线数据分散到各个候选离线数据处理进程,在待处理离线数据对应的注册消息发送至目标离线数据处理进程后,可通过目标离线数据处理进程对待处理离线数据进行数据处理,因此单个目标离线数据处理进程的负载量较小,本发明实施例可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的玩法和系统无响应的情况,从而显著改善了玩家的游戏体验。
83.在一种实施方式中,进程确定模块704还用于:判断候选离线数据处理进程已绑定的第一数据结构中是否存在待处理离线数据对应的数据结构;如果是,将待处理离线数据对应的数据结构绑定的候选离线数据处理进程,确定为目标离线数据处理进程;如果否,生成待处理离线数据对应的第二数据结构,并基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程。
84.在一种实施方式中,进程确定模块704还用于:基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态;根据当前空闲状态,从候选离线数据处理进程中确定目标离线数据处理进程。
85.在一种实施方式中,进程确定模块704还用于:确定每个候选离线数据处理进程已绑定的第一数据结构的结构总量;根据每个候选离线数据处理进程对应的结构总量,确定每个候选离线数据处理进程的当前空闲状态。
86.在一种实施方式中,进程确定模块704还用于:对于每个候选离线数据处理进程,获取该候选离线数据处理进程已绑定的每个第一数据结构对应的权重参数,并基于每个第一数据结构对应的权重参数,计算该候选离线数据处理进程对应的权重总和;根据每个候选离线数据处理进程对应的权重总和,确定每个候选离线数据处理进程的当前空闲状态。
87.在一种实施方式中,消息发送模块706还用于:建立第二数据结构中的数据标识符与目标离线数据处理进程之间的绑定关系;基于绑定关系向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程从第二数据结构中的数据标
识符和类型对应的数据存储地址,拉取待处理离线数据,并对待处理离线数据进行数据处理。
88.在一种实施方式中,上述装置还包括数据注销模块,用于:如果接收到针对于待处理离线数据的注销消息,删除待处理离线数据对应的数据结构与目标离线数据处理进程之间的绑定关系。
89.在一种实施方式中,上述装置还包括修改模块,用于:如果接收到针对于待处理离线数据的修改消息,将修改消息发送至目标离线数据处理进程,以通过目标离线数据处理进程基于修改消息对待处理离线数据进行修改处理。
90.在一种实施方式中,消息转发器配置有消息队列,消息队列存入有至少一个待处理离线数据;上述装置还包括消息处理模块,用于:如果接收到目标离线数据处理进程针对待处理离线数据的反馈消息,从消息队列中确定下一待处理离线数据;从候选离线数据处理进程中,确定下一待处理离线数据绑定的下一目标离线数据处理进程;向下一目标离线数据处理进程发送下一待处理离线数据对应的注册消息,以通过下一目标离线数据处理进程对下一待处理离线数据进行数据处理。
91.在一种实施方式中,游戏服务器还配置有主控制进程,上述装置还包括进程移除模块,用于:如果接收到主控制进程发送的进程移除消息,从候选离线数据处理进程中确定进程移除消息对应的待移除离线数据处理进程;其中,进程移除消息是主控制进程在预设时长内,未接收到待移除离线数据处理进程的状态同步消息时生成的;确定与待移除离线数据处理进程绑定的每个第一数据结构;对于待移除离线数据处理进程绑定的每个第一数据结构,从除待移除离线数据处理进程之外的候选离线数据处理进程中,确定该第一数据结构对应的目标迁移离线数据处理进程;向目标迁移离线数据处理进程发送该第一数据结构对应的注册消息,以通过目标迁移离线数据处理进程对该第一数据结构对应的离线数据进行数据处理。
92.本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
93.本发明实施例提供了一种服务器,具体的,该服务器包括处理器和存储装置;存储装置上存储有计算机程序,计算机程序在被处理器运行时执行:
94.一种游戏中离线数据的处理方法,方法应用于游戏服务器中的消息转发器,游戏服务器配置有多个候选离线数据处理进程,方法包括:获取待处理离线数据;从候选离线数据处理进程中确定目标离线数据处理进程;向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理。
95.在一种实施方式中,从候选离线数据处理进程中确定目标离线数据处理进程的步骤,包括:判断候选离线数据处理进程已绑定的第一数据结构中是否存在待处理离线数据对应的数据结构;如果是,将待处理离线数据对应的数据结构绑定的候选离线数据处理进程,确定为目标离线数据处理进程;如果否,生成待处理离线数据对应的第二数据结构,并基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程。
96.在一种实施方式中,基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程的步骤,包括:基于每个候选离线数
据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态;根据当前空闲状态,从候选离线数据处理进程中确定目标离线数据处理进程。
97.在一种实施方式中,基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态的步骤,包括:确定每个候选离线数据处理进程已绑定的第一数据结构的结构总量;根据每个候选离线数据处理进程对应的结构总量,确定每个候选离线数据处理进程的当前空闲状态。
98.在一种实施方式中,基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态的步骤,还包括:对于每个候选离线数据处理进程,获取该候选离线数据处理进程已绑定的每个第一数据结构对应的权重参数,并基于每个第一数据结构对应的权重参数,计算该候选离线数据处理进程对应的权重总和;根据每个候选离线数据处理进程对应的权重总和,确定每个候选离线数据处理进程的当前空闲状态。
99.在一种实施方式中,向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理的步骤,包括:建立第二数据结构中的数据标识符与目标离线数据处理进程之间的绑定关系;基于绑定关系向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程从第二数据结构中的数据标识符和数据类型对应的数据存储地址,拉取待处理离线数据,并对待处理离线数据进行数据处理。
100.在一种实施方式中,方法还包括:如果接收到针对于待处理离线数据的注销消息,删除待处理离线数据对应的数据结构与目标离线数据处理进程之间的绑定关系。
101.在一种实施方式中,方法还包括:如果接收到针对于待处理离线数据的修改消息,将修改消息发送至目标离线数据处理进程,以通过目标离线数据处理进程基于修改消息对待处理离线数据进行修改处理。
102.在一种实施方式中,消息转发器配置有消息队列,消息队列存入有至少一个待处理离线数据;方法还包括:如果接收到目标离线数据处理进程针对待处理离线数据的反馈消息,从消息队列中确定下一待处理离线数据;从候选离线数据处理进程中,确定下一待处理离线数据绑定的下一目标离线数据处理进程;向下一目标离线数据处理进程发送下一待处理离线数据对应的注册消息,以通过下一目标离线数据处理进程对下一待处理离线数据进行数据处理。
103.在一种实施方式中,游戏服务器还配置有主控制进程,方法还包括:如果接收到主控制进程发送的进程移除消息,从候选离线数据处理进程中确定进程移除消息对应的待移除离线数据处理进程;其中,进程移除消息是主控制进程在预设时长内,未接收到待移除离线数据处理进程的状态同步消息时生成的;确定与待移除离线数据处理进程绑定的每个第一数据结构;对于待移除离线数据处理进程绑定的每个第一数据结构,从除待移除离线数据处理进程之外的候选离线数据处理进程中,确定该第一数据结构对应的目标迁移离线数据处理进程;向目标迁移离线数据处理进程发送该第一数据结构对应的注册消息,以通过目标迁移离线数据处理进程对该第一数据结构对应的离线数据进行数据处理。
104.本发明实施例提供的服务器,在游戏服务器中开设多个候选离线数据处理进程,从而将离线数据分散到各个候选离线数据处理进程,在待处理离线数据对应的注册消息发
送至目标离线数据处理进程后,可通过目标离线数据处理进程对待处理离线数据进行数据处理,因此单个目标离线数据处理进程的负载量较小,本发明实施例可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的系统和玩法无响应的情况,从而显著改善了玩家的游戏体验。
105.图8为本发明实施例提供的一种服务器的结构示意图,该服务器100包括:处理器80,存储器81,总线82和通信接口83,处理器80、通信接口83和存储器81通过总线82连接;处理器80用于执行存储器81中存储的可执行模块,例如计算机程序。
106.其中,存储器81可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口83(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
107.总线82可以是isa总线、pci总线或eisa总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
108.其中,存储器81用于存储程序,处理器80在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器80中,或者由处理器80实现。
109.处理器80可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器80中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器80可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现成可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器81,处理器80读取存储器81中的信息,结合其硬件完成上述方法的步骤。
110.本发明实施例所提供的可读存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行:
111.一种游戏中离线数据的处理方法,方法应用于游戏服务器中的消息转发器,游戏服务器配置有多个候选离线数据处理进程,方法包括:获取待处理离线数据;从候选离线数据处理进程中确定目标离线数据处理进程;向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理。
112.在一种实施方式中,从候选离线数据处理进程中确定目标离线数据处理进程的步骤,包括:判断候选离线数据处理进程已绑定的第一数据结构中是否存在待处理离线数据对应的数据结构;如果是,将待处理离线数据对应的数据结构绑定的候选离线数据处理进
程,确定为目标离线数据处理进程;如果否,生成待处理离线数据对应的第二数据结构,并基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程。
113.在一种实施方式中,基于每个候选离线数据处理进程已绑定的第一数据结构,从候选离线数据处理进程中确定目标离线数据处理进程的步骤,包括:基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态;根据当前空闲状态,从候选离线数据处理进程中确定目标离线数据处理进程。
114.在一种实施方式中,基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态的步骤,包括:确定每个候选离线数据处理进程已绑定的第一数据结构的结构总量;根据每个候选离线数据处理进程对应的结构总量,确定每个候选离线数据处理进程的当前空闲状态。
115.在一种实施方式中,基于每个候选离线数据处理进程已绑定的第一数据结构,确定每个候选离线数据处理进程的当前空闲状态的步骤,还包括:对于每个候选离线数据处理进程,获取该候选离线数据处理进程已绑定的每个第一数据结构对应的权重参数,并基于每个第一数据结构对应的权重参数,计算该候选离线数据处理进程对应的权重总和;根据每个候选离线数据处理进程对应的权重总和,确定每个候选离线数据处理进程的当前空闲状态。
116.在一种实施方式中,向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程对待处理离线数据进行数据处理的步骤,包括:建立第二数据结构中的数据标识符与目标离线数据处理进程之间的绑定关系;基于绑定关系向目标离线数据处理进程发送待处理离线数据对应的注册消息,以通过目标离线数据处理进程从第二数据结构中的数据标识符和数据类型对应的数据存储地址,拉取待处理离线数据,并对待处理离线数据进行数据处理。
117.在一种实施方式中,方法还包括:如果接收到针对于待处理离线数据的注销消息,删除待处理离线数据对应的数据结构与目标离线数据处理进程之间的绑定关系。
118.在一种实施方式中,方法还包括:如果接收到针对于待处理离线数据的修改消息,将修改消息发送至目标离线数据处理进程,以通过目标离线数据处理进程基于修改消息对待处理离线数据进行修改处理。
119.在一种实施方式中,消息转发器配置有消息队列,消息队列存入有至少一个待处理离线数据;方法还包括:如果接收到目标离线数据处理进程针对待处理离线数据的反馈消息,从消息队列中确定下一待处理离线数据;从候选离线数据处理进程中,确定下一待处理离线数据绑定的下一目标离线数据处理进程;向下一目标离线数据处理进程发送下一待处理离线数据对应的注册消息,以通过下一目标离线数据处理进程对下一待处理离线数据进行数据处理。
120.在一种实施方式中,游戏服务器还配置有主控制进程,方法还包括:如果接收到主控制进程发送的进程移除消息,从候选离线数据处理进程中确定进程移除消息对应的待移除离线数据处理进程;其中,进程移除消息是主控制进程在预设时长内,未接收到待移除离线数据处理进程的状态同步消息时生成的;确定与待移除离线数据处理进程绑定的每个第一数据结构;对于待移除离线数据处理进程绑定的每个第一数据结构,从除待移除离线数
据处理进程之外的候选离线数据处理进程中,确定该第一数据结构对应的目标迁移离线数据处理进程;向目标迁移离线数据处理进程发送该第一数据结构对应的注册消息,以通过目标迁移离线数据处理进程对该第一数据结构对应的离线数据进行数据处理。
121.本发明实施例提供的可读存储介质,在游戏服务器中开设多个候选离线数据处理进程,从而将离线数据分散到各个候选离线数据处理进程,在待处理离线数据对应的注册消息发送至目标离线数据处理进程后,可通过目标离线数据处理进程对待处理离线数据进行数据处理,因此单个目标离线数据处理进程的负载量较小,本发明实施例可以较好地均衡离线数据处理进程的负载,有效改善了因离线数据处理进程负载过高无响应而导致的系统和玩法无响应的情况,从而显著改善了玩家的游戏体验。
122.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
123.最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1