服务器场景管理方法转让专利

申请号 : CN201510272188.X

文献号 : CN106302340B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨洁彪

申请人 : 广州四三九九信息科技有限公司

摘要 :

本发明提供一种服务器场景管理方法,包括以下步骤:当所述场景管理器接收到玩家进入目标场景的请求时,所述场景管理器以所述目标场景ID为关键词,查找所述场景映射表,查找到该目标场景当前容纳的各个场景实体,并在所查找到的各个场景实体中,获得当前负载最轻的特定场景实体;然后,所述场景管理器进一步判断所述特定场景实体当前所容纳的玩家数量是否超过最大值,如果超过,则自动进行分线处理;如果未超过,则执行将玩家加入到特定场景实体的步骤。优点为:采用多场景进程部署架构,通过多个无差别的场景进程,维护场景实体的运行,从而提高场景实体的维护效率,最终增强玩家游戏体验。

权利要求 :

1.一种服务器场景管理方法,其特征在于,包括以下步骤:

S1,场景管理器建立并维护场景映射表;其中,所述场景映射表用于存储场景ID以及该场景当前存在的各个场景实体属性的对应关系;所述场景实体属性包括:场景实体标签、场景实体当前容纳的玩家数量以及该场景实体所归属的场景ID;

预建立并维护多进程场景集群;所述多进程场景集群包括1个场景管理进程和多个场景进程;所述场景管理进程运行于所述场景管理器中;

其中,所述场景管理进程,用于维护场景进程映射表;所述场景进程映射表用于维护各个场景进程的负载情况,具体用于维护场景进程ID和该场景进程当前在线玩家数量的对应关系;

每个所述场景进程维护着一个场景实体列表;其中,所述场景实体列表用于维护多个场景实体,所述场景实体包括:场景实体标签、该场景实体所属的场景ID、该场景实体当前在线玩家数量以及该场景实体当前在线玩家列表;

S2,当所述场景管理器接收到玩家进入目标场景的请求时,其中,该请求中携带有目标场景ID;

所述场景管理器以所述目标场景ID为关键词,查找所述场景映射表,查找到该目标场景当前容纳的各个场景实体,并在所查找到的各个场景实体中,获得当前负载最轻的特定场景实体;然后,所述场景管理器进一步判断所述特定场景实体当前所容纳的玩家数量是否超过最大值,如果超过,则执行S3;如果未超过,则执行S4;

S3,所述场景管理器自动进行分线处理,即:

S3.1,所述场景管理器查找所述场景进程映射表,得到当前负载最轻的特定场景进程ID;

S3.2,所述场景管理器在所述特定场景进程中新建一个新场景实体,初始时,所述新场景实体的当前在线玩家数量为0;然后,将所述玩家放置于所述新场景实体中,并将所述新场景实体当前在线玩家数量更新为1;

此外,所述场景管理器更新场景进程映射表,将所述场景进程映射表中,该特定场景进程当前在线玩家数量增加1;

此外,所述场景管理器更新S2查找到的所述场景映射表,向所述场景映射表中增加所述新场景实体,并将所述新场景实体所对应的当前容纳的玩家数量增加1;

S4,所述场景管理器以所述特定场景实体的标签为查找关键词,查找所述多进程场景集群,得到所述特定场景实体所归属的特定场景进程;一方面,在所述特定场景进程所绑定的所述特定场景实体中,更新所述场景实体列表,将所述特定场景实体的当前在线玩家数量增加1,从而将玩家加入到所述特定场景实体;另一方面,所述场景管理器更新所述场景进程映射表,将所述场景进程映射表中,该特定场景进程当前在线玩家数量增加1;再一方面,所述场景管理器更新所述场景映射表,将所述目标场景所包含的所述特定场景实体的当前所容纳的玩家数量增加1。

2.根据权利要求1所述的服务器场景管理方法,其特征在于,所述场景进程映射表采用以场景进程ID为哈希索引。

说明书 :

服务器场景管理方法

技术领域

[0001] 本发明属于场景管理技术领域,具体涉及一种服务器场景管理方法。

背景技术

[0002] 目前,游戏服务器场景管理方法,主要为单进程场景管理方法,即:采用单个场景进程同时维护多个场景实体。该种方法虽然具有实现简单、操作逻辑简单的优点;但是,当单个场景人数达到一定数量,通常是100到200的同屏数量时,游戏服务器承载压力急剧上升,服务器的cpu以及网络io将无法承担;此外,当场景总体数量达到一个量级后,单个场景进程也会成为服务器性能瓶颈,从而严重降低了玩家加入场景的速度,最终影响玩家游戏体验。

发明内容

[0003] 针对现有技术存在的缺陷,本发明提供一种服务器场景管理方法,可有效解决上述问题。
[0004] 本发明采用的技术方案如下:
[0005] 本发明提供一种服务器场景管理方法,包括以下步骤:
[0006] S1,场景管理器建立并维护场景映射表;其中,所述场景映射表用于存储场景ID以及该场景当前存在的各个场景实体属性的对应关系;所述场景实体属性包括:场景实体标签、场景实体当前容纳的玩家数量以及该场景实体所归属的场景ID;
[0007] 预建立并维护多进程场景集群;所述多进程场景集群包括1个场景管理进程和多个场景进程;所述场景管理器运行于所述场景管理进程中;
[0008] 其中,所述场景管理进程,用于维护场景进程映射表;所述场景进程映射表用于维护各个场景进程的负载情况,具体用于维护场景进程ID和该场景进程当前在线玩家数量的对应关系;
[0009] 每个所述场景进程维护着一个场景实体列表;其中,所述场景实体列表用于维护多个场景实体,所述场景实体包括:场景实体标签、该场景实体所属的场景ID、该场景实体当前在线玩家数量以及该场景实体当前在线玩家列表;
[0010] S2,当所述场景管理器接收到玩家进入目标场景的请求时,其中,该请求中携带有目标场景ID;
[0011] 所述场景管理器以所述目标场景ID为关键词,查找所述场景映射表,查找到该目标场景当前容纳的各个场景实体,并在所查找到的各个场景实体中,获得当前负载最轻的特定场景实体;然后,所述场景管理器进一步判断所述特定场景实体当前所容纳的玩家数量是否超过最大值,如果超过,则执行S3;如果未超过,则执行S4;
[0012] S3,所述场景管理器自动进行分线处理,即:
[0013] S3.1,所述场景管理器查找所述场景进程映射表,得到当前负载最轻的特定场景进程ID;
[0014] S3.2,所述场景管理器在所述特定场景进程中新建一个新场景实体,初始时,所述新场景实体的当前在线玩家数量为0;然后,将所述玩家放置于所述新场景实体中,并将所述新场景实体当前在线玩家数量更新为1;
[0015] 此外,所述场景管理器更新场景进程映射表,将所述场景进程映射表中,该特定场景进程当前在线玩家数量增加1;
[0016] 此外,所述场景管理器更新S2查找到的所述场景映射表,向所述场景映射表中增加所述新场景实体,并将所述新场景实体所对应的当前容纳的玩家数量增加1;
[0017] S4,所述场景管理器以所述特定场景实体的标签为查找关键词,查找所述多进程场景集群,得到所述特定场景实体所归属的特定场景进程;一方面,在所述特定场景进程所绑定的所述特定场景实体中,更新所述场景实体列表,将所述特定场景实体的当前在线玩家数量增加1,从而将玩家加入到所述特定场景实体;另一方面,所述场景管理器更新所述场景进程映射表,将所述场景进程映射表中,该特定场景进程当前在线玩家数量增加1;再一方面,所述场景管理器更新所述场景映射表,将所述目标场景所包含的所述特定场景实体的当前所容纳的玩家数量增加1。
[0018] 优选的,所述场景进程映射表采用以场景进程ID为哈希索引。
[0019] 本发明提供的服务器场景管理方法具有以下优点:
[0020] 采用多场景进程部署架构,通过多个无差别的场景进程,维护场景实体的运行,从而提高场景实体的维护效率,最终增强玩家游戏体验。

附图说明

[0021] 图1为本发明提供的场景管理器所建立的场景映射表的具体示例;
[0022] 图2为本发明提供的多进程场景集群的示意图;
[0023] 图3为本发明提供的场景管理进程和场景进程的布署示意图。

具体实施方式

[0024] 以下结合附图对本发明进行详细说明:
[0025] 本发明提供一种服务器场景管理方法,包括以下步骤:
[0026] S1,场景管理器建立并维护场景映射表;其中,所述场景映射表用于存储场景ID以及该场景当前存在的各个场景实体属性的对应关系;所述场景实体属性包括:场景实体标签、场景实体当前容纳的玩家数量以及该场景实体所归属的场景ID;如图1所示,为场景管理器所建立的场景映射表的具体示例。
[0027] 预建立并维护多进程场景集群;如图2所示,为多进程场景集群的示意图;所述多进程场景集群包括1个场景管理进程和多个场景进程;所述场景管理器运行于所述场景管理进程中;
[0028] 具体的,场景管理进程管理着所有的场景进程,场景管理进程只存在一个,场景进程可以有1或多个,并且可以动态添加、删除。场景管理进程和所有的场景进程可以独立部署,也可以部署在同一个物理机中,场景管理进程和所有的场景进程只需要与中转路由保持一个tcp的链接即可。所有场景进程与场景管理进程保持高频率的心跳响应,当新加或减少的场景进程在场景管理进程中监测到时,则由场景管理进程进行容灾管理,动态添加或减少场景节点,之后的场景请求则自动适配新的场景分配方案上。
[0029] 此外,参考图3,为场景管理进程和场景进程的布署示意图;所述场景管理进程,用于维护场景进程映射表;所述场景进程映射表用于维护各个场景进程的负载情况,具体用于维护场景进程ID和该场景进程当前在线玩家数量的对应关系;
[0030] 具体实现上,场景进程映射表可以以场景进程ID为哈希索引,每个哈希节点保存的元素有:场景进程id(proc_id)、玩家数量count,即对应场景进程负载值。
[0031] 对场景进程映射表维护的过程为:当有玩家进入某个场景的某个场景实体时,在该场景实体所在的场景进程的玩家数量上增加一个单位的负载值;当需要新建一个场景实体时,则查找每个哈希节点,找出负载值最低的场景进程,将场景实体分配到该场景进程上。
[0032] 场景进程是指:所有的场景实体部署到其中一个场景进程中,所有场景进程无差别,均衡分配所有场景实体。每个所述场景进程维护着一个场景实体列表;其中,所述场景实体列表用于维护多个场景实体,所述场景实体包括:场景实体标签、该场景实体所属的场景ID、该场景实体当前在线玩家数量以及该场景实体当前在线玩家列表;
[0033] 因此,当新建场景实体绑定到该场景进程时,则在场景实体列表中添加一个场景节点所绑定的场景实体,玩家进入场景时,通过场景实体标签找到相应的场景实体,将玩家添加到该场景实体所记录的玩家列表中,玩家人数增加1;而当监测到某个玩家离开场景时,将玩家从对应的场景实体的玩家列表中移除,玩家人数减少1。
[0034] 也就是说,根据玩家进入或离开某个场景实体的情况,实时更新场景实体列表。
[0035] S2,当所述场景管理器接收到玩家进入目标场景的请求时,其中,该请求中携带有目标场景ID;
[0036] 所述场景管理器以所述目标场景ID为关键词,查找所述场景映射表,查找到该目标场景当前容纳的各个场景实体,并在所查找到的各个场景实体中,获得当前负载最轻的特定场景实体;然后,所述场景管理器进一步判断所述特定场景实体当前所容纳的玩家数量是否超过最大值,如果超过,则执行S3;如果未超过,则执行S4;
[0037] 例如,参考图1,假设目标场景ID为场景1,则:场景管理器查找到场景1所包含的各个场景实体,并获得当前负载最轻的特定场景实体。
[0038] S3,所述场景管理器自动进行分线处理,即:
[0039] S3.1,所述场景管理器查找所述场景进程映射表,得到当前负载最轻的特定场景进程ID;
[0040] S3.2,所述场景管理器在所述特定场景进程中新建一个新场景实体,初始时,所述新场景实体的当前在线玩家数量为0;然后,将所述玩家放置于所述新场景实体中,并将所述新场景实体当前在线玩家数量更新为1;
[0041] 此外,所述场景管理器更新场景进程映射表,将所述场景进程映射表中,该特定场景进程当前在线玩家数量增加1;
[0042] 此外,所述场景管理器更新S2查找到的所述场景映射表,向所述场景映射表中增加所述新场景实体,并将所述新场景实体所对应的当前容纳的玩家数量增加1;
[0043] S4,所述场景管理器以所述特定场景实体的标签为查找关键词,查找所述多进程场景集群,得到所述特定场景实体所归属的特定场景进程;一方面,在所述特定场景进程所绑定的所述特定场景实体中,更新所述场景实体列表,将所述特定场景实体的当前在线玩家数量增加1,从而将玩家加入到所述特定场景实体;另一方面,所述场景管理器更新所述场景进程映射表,将所述场景进程映射表中,该特定场景进程当前在线玩家数量增加1;再一方面,所述场景管理器更新所述场景映射表,将所述目标场景所包含的所述特定场景实体的当前所容纳的玩家数量增加1。
[0044] 上述过程的大致思路为:
[0045] 每次有角色进入场景时,通过场景进程映射表查找场景id相对应的场景实体列表,根据场景实体列表中各个场景实体的负载情况,查找人数最少的一个场景实体,然后根据相应的场景实体标签查找到布署于场景进程的对应的场景实体,将玩家放置于该场景实体中,并将场景实体中的玩家数量加1。
[0046] 对于单个场景实体中,当容纳的人数达到一定数量后,为避免单场景的性能热点造成瓶颈,场景管理器会自动进行分线。每次查找到人数最少的场景实体后,判断场景实体所容易的当前玩家数量是否大于最大值,如果大于,则新建场景节点和场景实体,并互相绑定,初始人数为0,并执行正常的角色场景进入流程,最终将人数加1。
[0047] 游戏内单人场景与普通场景一样,具有场景id和场景实体tag,但每个玩家的场景实体都独立并且私有,场景id可能一样,但场景实体tag都不一样。
[0048] 由此可见,本发明提供的服务器场景管理方法,具有以下优点:
[0049] 采用多场景进程部署架构,通过多个无差别的场景进程,维护场景实体的运行,从而提高场景实体的维护效率,最终增强玩家游戏体验。
[0050] 采用场景管理器均衡场景性能,当场景实体所容纳的玩家数量超过最大值时,采用自动场景分线管理方案,既平衡场景进程压力,又提高场景管理效率,加快玩家进入到某个场景实体的效率。
[0051] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。