CN111905362A - 游戏公会的加载方法和服务器 - Google Patents

游戏公会的加载方法和服务器 Download PDF

Info

Publication number
CN111905362A
CN111905362A CN202010840501.6A CN202010840501A CN111905362A CN 111905362 A CN111905362 A CN 111905362A CN 202010840501 A CN202010840501 A CN 202010840501A CN 111905362 A CN111905362 A CN 111905362A
Authority
CN
China
Prior art keywords
guild
game
virtual service
server
loaded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010840501.6A
Other languages
English (en)
Inventor
杨彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202010840501.6A priority Critical patent/CN111905362A/zh
Publication of CN111905362A publication Critical patent/CN111905362A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/79Game security or game management aspects involving player-related data, e.g. identities, accounts, preferences or play histories

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Business, Economics & Management (AREA)
  • Computer Security & Cryptography (AREA)
  • General Business, Economics & Management (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供了一种游戏公会的加载方法和服务器,该方法包括:响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识;基于待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;将待加载公会加载至目标节点对应的游戏服务器上。由于本发明在为待加载公会分配加载公会的游戏服务器时,引入了服务器集群中每个游戏服务器设置的虚拟服务节点,从而可以均衡不同游戏服务器上加载的游戏公会数量,同时当游戏服务器宕机时,该方式能够根据游戏公会加载请求,为宕机的游戏服务器加载的游戏公会重新分配游戏服务器,实现了游戏公会的动态迁移,可提高玩家的游戏体验感。

Description

游戏公会的加载方法和服务器
技术领域
本发明涉及游戏交互技术领域,尤其是涉及一种游戏公会的加载方法和服务器。
背景技术
游戏公会是游戏玩家的社交平台,该游戏公会不依附于某款具体游戏,可提高游戏对玩家的黏连度,通过投放公会奖励驱动玩家的社交需求,也即是玩家可通过加入游戏公会来共同完成任务,任务完成后公会中的玩家会获得公会奖励。
相关技术中,为游戏公会分配游戏服务器时,通常将游戏公会分配在公会创建者所在的游戏服务器上,该方式虽然简单,但是易导致不同的游戏服务器上运行的公会数量差距较大,影响游戏服务器的正常运行,且如果某一游戏服务器宕机,分配到该游戏服务器上的公会均无法加载,导致玩家体验较差。
发明内容
本发明的目的在于提供一种游戏公会的加载方法和服务器,以减少不同的游戏服务器上运行的公会数量的差距,提高玩家体验感。
第一方面,本发明实施例提供一种游戏公会的加载方法,该方法应用于游戏服务器,该游戏服务器隶属于由多个游戏服务器组成的服务器集群,该服务器集群中每个游戏服务器提供至少一个虚拟服务节点;该方法包括:响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识;基于待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;将待加载公会加载至目标节点对应的游戏服务器上。
在可选的实施方式中,上述基于待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点的步骤,包括:计算待加载公会的公会标识的哈希值;基于该哈希值,从预设哈希空间中确定待加载公会对应的目标节点;其中,预设哈希空间中包括:服务器集群中每个游戏服务器提供的虚拟服务节点,以及每个虚拟服务节点的哈希值。
在可选的实施方式中,上述基于哈希值,从预设哈希空间中确定待加载公会对应的目标节点的步骤,包括:从预设哈希空间中,确定与待加载公会的哈希值相匹配的哈希值;该相匹配的哈希值包括:在顺时针方向上,与待加载公会的哈希值相邻的、对应有虚拟服务节点的哈希值;将相匹配的哈希值对应的虚拟服务节点确定为目标节点。
在可选的实施方式中,上述服务器集群中每个游戏服务器提供的虚拟服务节点的数量相同;游戏服务器提供的虚拟服务节点的数量通过下述方式确定:获取游戏服务器提供的虚拟服务节点的多个备选数量,计算每个备选数量对应的服务器集群的负载方差;将满足预设条件的负载方差对应的备选数量,确定为游戏服务器提供的虚拟服务节点的数量。
在可选的实施方式中,上述计算每个备选数量对应的服务器集群的负载方差的步骤,包括:针对多个备选数量中的每个备选数量,执行下述操作:根据当前备选数量,得到服务器集群中的多个虚拟服务节点;根据多个虚拟服务节点中每个虚拟服务节点的哈希值,得到当前备选数量对应的哈希空间;计算每个游戏服务器对应的当前备选数量的虚拟服务节点,在当前备选数量对应的哈希空间的占用空间;根据每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间,确定服务器集群的负载方差。
在可选的实施方式中,上述虚拟服务节点的哈希值,通过下述方式计算得到:根据虚拟服务节点的节点标识,确定虚拟服务节点的MD5值;将MD5值确定为虚拟服务节点的哈希值;其中,虚拟服务节点的节点标识包括:虚拟服务节点对应的游戏服务器的IP地址,加上,当前备选数量对应的哈希空间能够容纳的数值量与服务器集群包含的虚拟服务节点总数的商与虚拟服务节点的预设编号的乘积。
在可选的实施方式中,上述计算每个游戏服务器对应的当前备选数量的虚拟服务节点,在当前备选数量对应的哈希空间的占用空间的步骤,包括:针对每个游戏服务器对应的每个虚拟服务节点,将当前虚拟服务节点,与当前备选数量对应的哈希空间中当前虚拟服务节点的前一个虚拟服务节点之间的空间,确定为当前虚拟服务节点的占用空间;针对每个游戏服务器,将当前游戏服务器对应的每个虚拟服务节点的占用空间相加,得到当前游戏服务器对应的虚拟服务节点的占用空间。
在可选的实施方式中,上述根据每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间,确定服务器集群的负载方差的步骤,包括:计算每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间的平均值;将每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间均除以平均值,得到多个负载因子;对多个负载因子计算方差,得到服务器集群的负载方差。
在可选的实施方式中,上述将待加载公会加载至目标节点对应的游戏服务器上的步骤之后,方法还包括:将待加载公会以及待加载公会加载到的游戏服务器,关联保存到预设缓存列表中;监听服务器集群中除游戏服务器之外的其他游戏服务器的运行状态;如果存在停止运行的游戏服务器,删除预设缓存列表中停止运行的游戏服务器运行的游戏公会,当接收到停止运行的游戏服务器运行的游戏公会的加载请求时,继续执行响应于游戏公会加载请求,获取游戏公会加载请求对应的待加载公会的公会标识的步骤。
在可选的实施方式中,上述游戏服务器中包含有定时器;将待加载公会加载至目标节点对应的游戏服务器上的步骤之后,方法还包括:当待加载公会中的玩家均下线时,开启定时器;如果定时器定时结束后,待加载公会中的玩家未上线,将待加载公会从加载至的游戏服务器转移至预设数据库中。
在可选的实施方式中,响应于游戏公会加载请求,获取游戏公会加载请求对应的待加载公会的公会标识的步骤,包括:接收玩家发送的游戏公会加载请求;游戏公会加载请求中携带有玩家所属的游戏公会的公会标识;判断玩家所属的游戏公会是否在预设缓存列表中;如果不在预设缓存列表中,缓存加载请求,将玩家所属的游戏公会确定为待加载公会,并从述游戏公会加载请求中获取公会标识。
在可选的实施方式中,上述游戏服务器包括dispatch接口;接收玩家发送的游戏公会加载请求的步骤,包括:通过dispatch接口,接收玩家发送的游戏公会加载请求。
在可选的实施方式中,将待加载公会加载至目标节点对应的游戏服务器上的步骤之后,方法还包括:针对待加载公会,监听当前时间与上次存盘时间的时间差是否大于第一时间阈值;如果大于,对待加载公会对应的信息进行存盘;监听待加载公会在第二时间阈值内,是否接收到玩家发送的请求指令;如果接收到,对请求指令进行存盘。
在可选的实施方式中,游戏服务器包括指定路由接口,指定路由用于:服务器集群中的每个游戏服务器之间进行信息传输。
在可选的实施方式中,该方法还包括:将游戏公会保存在预设的推荐缓存池中;其中,该推荐缓存池中包含有多个游戏公会;根据预设规则,从推荐缓存池中选取目标游戏公会,并将该目标游戏公会发送给未加入目标游戏公会的玩家;记录推荐缓存池中的游戏公会的发送次数,将发送次数大于预设阈值的游戏公会,从推荐缓存池中删除。
第二方面,本发明实施例提供一种游戏公会的加载装置,该装置设置于游戏服务器,该游戏服务器隶属于由多个游戏服务器组成的服务器集群,服务器集群中每个游戏服务器提供至少一个虚拟服务节点;该装置包括:加载请求响应模块,用于响应于游戏公会加载请求,获取游戏公会加载请求对应的待加载公会的公会标识;目标节点确定模块,用于基于待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;公会加载模块,用于将待加载公会加载至目标节点对应的游戏服务器上。
第三方面,本发明实施例提供一种服务器,包括处理器和存储器,该存储器存储有能够被处理器执行的机器可执行指令,该处理器执行机器可执行上述游戏公会的加载方法。
第四方面,本发明实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使处理器实现上述游戏公会的加载方法。
本发明实施例带来了以下有益效果:
本发明提供的一种游戏公会的加载方法和服务器,该技术首先响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识;进而基于该待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;然后将待加载公会加载至目标节点对应的游戏服务器上。该方式中,服务器集群中每个游戏服务器提供有虚拟服务节点,基于待加载公会的公会标识,确定该待加载公会的目标节点,进而确定用于加载该待加载公会的服务器,该方式可以均衡不同游戏服务器上加载的游戏公会数量,同时当游戏服务器宕机时,该方式能够根据游戏公会加载请求,为宕机的游戏服务器加载的游戏公会重新分配游戏服务器,实现了游戏公会的动态迁移,可提高玩家的游戏体验感。
本发明的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本发明的上述技术即可得知。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施方式,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种游戏公会的加载方法的流程图;
图2为本发明实施例提供的另一种游戏公会的加载方法的流程图;
图3为本发明实施例提供的一种预设哈希空间的示意图;
图4为本发明实施例提供的虚拟服务节点个数与预设哈希空间分布的关系图;
图5为本发明实施例提供的虚拟服务节点的备选数量与服务器集群的负载方差的影响曲线示意图;
图6为本发明实施例提供的另一种游戏公会的加载方法的流程图;
图7为本发明实施例提供的一种公会信息同步的示意图;
图8为本发明实施例提供的游戏服务器之间进行信息传输的示意图;
图9为本发明实施例提供的一种游戏公会的加载装置的结构示意图;
图10为本发明实施例提供的一种服务器的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
相关技术中,为游戏公会分配游戏服务器时,通常将游戏公会分配在公会创建者所在的游戏服务器上,该方式较简单,公会玩家在发送公会请求时,可以在公会玩家对应的游戏服务器上记录公会创建者所在的游戏服务器的服务器编码,并直接在该编号对应的游戏服务器上进行游戏公会加载和公会请求处理,这种将游戏公会与游戏服务器进行绑定的方式,实现简单,可靠性和安全性均较高,但是当游戏服务器缩减时需要扫荡处理,增加游戏服务器时,易导致不同的游戏服务器上运行的公会数量差距较大,影响游戏服务器的正常运行,且如果某一游戏服务器宕机,分配到该游戏服务器上的公会均无法加载,进而公会功能瘫痪,导致玩家体验较差。
基于此,本发明实施例提供了一种游戏公会的加载方法和服务器,该技术可以用于游戏公会管理的场景中,尤其是游戏公会的服务器分配场景中。为便于对本实施例进行理解,首先对本发明实施例所公开的一种游戏公会的加载方法进行详细介绍,该方法应用于游戏服务器,该游戏服务器隶属于由多个游戏服务器组成的服务器集群,该服务器集群中每个游戏服务器提供至少一个虚拟服务节点。
上述服务器集群中包括多个游戏服务器,本发明的游戏公会的加载方法可以应用于服务器集群中的任何一个游戏服务器,每个游戏服务器中都保存有服务器集群中所有的游戏服务器的ID(Identity,身份标识),该ID可以是游戏服务器的IP(Internet Protocol,互联网协议)地址,每个游戏服务器都可以对应有至少一个虚拟服务节点,且每个游戏服务器对应的虚拟服务节点的数量是相同,每个游戏服务器对应的虚拟服务节点的数量可以根据业务需求设定,也可以根据研发需求设定等,此处为每个游戏服务器设置虚拟服务节点的目的是为了均衡每个游戏服务器的负载,也即是为了保证每个游戏服务器上运行的游戏公会的数量相差不多。
基于上述描述,本发明实施例提供的一种游戏公会的加载方法的流程图,如图1所示,该方法包括如下具体步骤:
步骤S102,响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识。
上述游戏公会加载请求可以是公会玩家发送的RPC(Remote Procedure Call,远程过程调用)消息,RPC通常是一种协议,程序可以通过该协议向网络中的另一台计算机上的程序请求服务,在RPC中,发出请求的程序是客户程序,而提供服务的程序是服务器。在具体实现时,上述PRC消息可以是申请加入公会、花钱提升公会等级、退出公会、踢出公会成员、公会上线或者公会聊天信息等与公会相关的请求,这些请求可以统称为游戏公会加载请求。
在具体实现时,公会玩家可以向其所在的游戏服务器发送游戏公会加载请求,该游戏公会加载请求中携带有该玩家想要访问的游戏公会的公会标识;该游戏服务器接收到该游戏公会加载请求时,会判定该玩家想要访问的游戏公会是否已经被加载,如果已经被加载,则可通过该游戏公会运行在的游戏服务器处理该游戏公会加载请求,例如,该游戏公会加载请求为向其他公会成员发送聊天消息,则自身服务器会将该聊天信息发送给游戏公会运行在的游戏服务器,以通过该游戏服务器将该聊天消息发送给游戏公会的其他成员玩家;如果未被加载,需要该自身服务器将玩家想要访问的游戏公会确定为待加载公会,并从游戏公会加载请求中获取待加载公会的公会标识。
上述公会标识是每个游戏公会特有的标识,该公会标识表征了游戏公会的身份;该公会标识可以是由字符、数字或者特殊字符等组合成的字符串,例如,12131342aaa等。
步骤S104,基于上述待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点。
在具体实现时,可以根据待加载公会的公会标识,从服务器集群的每个游戏服务器对应的虚拟服务节点中,随机选择一个虚拟服务节点为目标节点;也可以预先建立待加载公会的公会标识,与虚拟服务节点的节点标识之间的联系,然后根据公会标识,从服务器集群的每个游戏服务器对应的虚拟服务节点中确定目标节点。
步骤S106,将上述待加载公会加载至目标节点对应的游戏服务器上。
由于设置虚拟服务节点的目的是为了均衡每个游戏服务器的负载,因而根据目标节点确定该目标节点对应的游戏服务器,并将待加载公会加载至目标节点对应的游戏服务器上,也即是将待加载公会加载至目标节点对应的游戏服务器的内存上,以使该游戏服务器运行待加载公会。
在具体实现时,在服务器集群中游戏服务器的数量没有改变、且游戏服务器没有宕机的情况下,每个游戏公会每次都会被分配(相当于加载)到同一个游戏服务器上。当服务器集群中新增游戏服务器、减少游戏服务器或者有游戏服务器宕机时,需要根据游戏公会的公会标识,重新为游戏公会分配游戏服务器,从而可以保证各个游戏服务的负载相对均衡。
具体地,未被加载到游戏服务器上运行的游戏公会,可以保存在预设数据库中,从而减少游戏服务器的内存占用;将游戏公会加载到游戏服务器上运行的过程,也即是将该游戏公会从预设数据库加载到游戏服务器的内存中运行的过程;在游戏公会运行的过程中,如果检测到该游戏公会的所有成员玩家均下线,且在指定时间内没有成员玩家上线,需要将该游戏公会从内存序列化到预设数据中,从而也可以减少游戏服务器的内存占用。
本发明提供的一种游戏公会的加载方法,首先响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识;进而基于该待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;然后将待加载公会加载至目标节点对应的游戏服务器上。该方式中,服务器集群中每个游戏服务器提供有虚拟服务节点,基于待加载公会的公会标识,确定该待加载公会的目标节点,进而确定用于加载该待加载公会的服务器,该方式可以均衡不同游戏服务器上加载的游戏公会数量,同时当游戏服务器宕机时,该方式能够根据游戏公会加载请求,为宕机的游戏服务器加载的游戏公会重新分配游戏服务器,实现了游戏公会的动态迁移,可提高玩家的游戏体验感。
本发明实施例还提供另一种游戏公会的加载方法,该方法在上述实施例所述方法的基础上实现;该方法重点描述基于待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点的具体过程(通过下述步骤S204-S206实现),如图2所示,该方法包括如下步骤:
步骤S202,响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识。
步骤S204,计算上述待加载公会的公会标识的哈希值。
哈希值通常是通过一定的哈希算法,将一段较长字符串映射为较短小的字符串,这段较短小的字符串就是较长字符串的哈希值,该哈希值具有唯一性,也即是不同的字符串可以对应不同的哈希值。该哈希算法可以采用MD5(Message-Digest Algorithm,信息摘要算法)或者SHA-1(Secure Hash Algorithm 1,安全散列算法1)等算法。该MD5算法通常是一种被广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值(也可称为哈希值),用于确保信息传输完整一致,也即是MD5算法可以根据任意长度的字符串,得到128位哈希值;该SHA-1算法可以根据任意长度的字符串,生成一个160位(20字节)散列值,该散列值通常的呈现形式为40个十六进制数。
上述待加载公会的公会标识可以为由数字组成的字符串,该字符串经过上述哈希算法的处理,可以得到待加载公会的公会标识对应的哈希值。
步骤S206,基于上述哈希值,从预设哈希空间中确定待加载公会对应的目标节点;其中,预设哈希空间中包括:服务器集群中每个游戏服务器提供的虚拟服务节点,以及每个虚拟服务节点的哈希值。
上述预设哈希空间预先设置有其能够容纳的数值量,该数值量可以根据研发需求设置,例如,该数值量可以是232,也即是该预设空间可以包含的哈希值为0~232之间的哈希值。在具体实现时,根据服务器集群中每个游戏服务器提供的虚拟服务节点对应的哈希值,将所有的虚拟服务节点映射到预设哈希空间中,也即是针对每个虚拟服务节点,在预设哈希空间中,查询与当前虚拟服务节点的哈希值相同的哈希值,并将当前虚拟服务节点映射在查询到的相同的哈希值对应的位置上。
在具体实现时,在预设哈希空间中,首先查询与待加载公会的公会标识对应的哈希值相同的哈希值;然后在确定目标节点时,如果该相同的哈希值上对应有虚拟服务节点,可以将该虚拟服务节点确定为目标节点;也可以将与该相同的哈希值相邻的虚拟服务节点中的任意一个虚拟服务节点确定为目标节点。具体地,上述步骤S206可以通过下述步骤10-11实现:
步骤10,从预设哈希空间中,确定与待加载公会的哈希值相匹配的哈希值;该相匹配的哈希值包括:在顺时针方向上,与待加载公会的哈希值相邻的、对应有虚拟服务节点的哈希值。
在具体实现时,上述预设哈希空间可以根据哈希值从小到大的顺序,映射到0~360度的空间上,在0~360度的空间上,查询与待加载公会的哈希值相同的哈希值,将与该相同的哈希值在顺时针方向上相邻的、对应有虚拟服务节点的哈希值,确定为相匹配的哈希值。
步骤11,将上述相匹配的哈希值对应的虚拟服务节点确定为目标节点。
如图3所示为预设哈希空间的示意图,图3中的每个圆圈都表示一个虚拟服务节点,其中,箭头所指的key对应的圆圈为待加载公会的哈希值对应的位置,在顺时针方向上,将箭头所指的key对应的圆圈的下一个圆圈对应的虚拟服务节点作为目标节点。
当服务器集群中新增游戏服务器或者减少游戏服务器时,需要根据游戏公会的公会标识,重新为游戏公会分配游戏服务器,从而可以保证各个游戏服务的负载相对均衡。从图3中可以看出当删除一个游戏服务器时,对于游戏公会的动态分配并没有受到影响,也可以理解为将之前分配到删除的游戏服务上游戏公会分配到其它游戏服务器上,也即是当删除一个游戏服务器时,将该删除的游戏服务上游戏公会下线(保存在预设数据库中),如果接收到该游戏公会的游戏公会加载请求时,可以实时为该游戏公会分配其他游戏服务器,因此对于整个服务集群不会有太大的影响,唯一的影响就是即时从预设数据库加载游戏公会时,会有一定的数据库负载,但是由于采用的加载策略是游戏公会加载请求驱动加载,因此压力会分散开来。
从图3中可以看出增加一个游戏服务器时,需要进行游戏公会的迁移,因为需要分配到新加的游戏服务器上的游戏公会可能被分配到了它下一个游戏服务器上,因此我们只要对新增加的游戏服务器的下一个游戏服务器检测所有的游戏公会,将不应该在自己身上的游戏公会全部踢下线即可,也即是为了保证负载均衡在自身承载的较多的游戏服务器踢下线。本方案中,出于平衡性的考虑,一致性哈希算法引入了虚拟服务节点,因此需要处理所有虚拟服务节点的下一个虚拟服务节点。
服务器集群中每个游戏服务器提供的虚拟服务节点的数量相同;直观上虚拟服务节点的数量越多越有利于游戏服务器的负载均衡,但是虚拟服务节点数量的增多也意味着查询、***和删除虚拟服务节点时的消耗增加,因此需要量化虚拟服务节点的数量增加对于负载均衡的影响,首先可以从图4中直观的感受虚拟服务节点对负载均衡的影响,图4中的虚拟节点相当于上述虚拟服务节点,图4中的每个圆环表示服务器集群中的一个游戏服务器,每个环上的点为虚拟服务节点,图4中分别显示了虚拟服务节点的个数为1个、10个、64个和100个时,虚拟服务节点在预设哈希空间的分布情况,从图4中可以看出虚拟服务节点数量越多,在预设哈希空间的分布越均匀,而且越是均匀的分布越能使得负载更加均衡。
随着虚拟服务节点个数的增多单个游戏服务器将更加均匀的分布在预设哈希空间中,为了选取合适的虚拟服务节点个数,可以通过下述步骤20-21确定游戏服务器提供的虚拟服务节点的数量:
步骤20,获取游戏服务器提供的虚拟服务节点的多个备选数量,计算每个备选数量对应的服务器集群的负载方差。
上述多个备选数量可以是为了选取虚拟服务节点的数量设置的数值范围中的每个数值,例如,该备选数量可以是0~120之间的每个数值。针对多个备选数量中的每个备选数量,计算游戏服务器提供的虚拟服务节点的数量为当前备选数量时,服务器集群的负载方差。该服务器集群的负载方差可以与每个游戏服务器对应的虚拟服务节点,在当前备选数量对应的哈希空间的占用空间有关。
步骤21,将满足预设条件的负载方差对应的备选数量,确定为游戏服务器提供的虚拟服务节点的数量。
上述预设条件可以是根据研发需求设置的条件,例如,负载方差最小值对应的备选数量,或者负载方差为预设值时对应的备选数量等。
在具体实现时,计算每个备选数量对应的服务器集群的负载方差时,针对多个备选数量中的每个备选数量,执行下述操作:上述步骤20可以通过下述步骤30-33实现:
步骤S30,根据当前备选数量,得到服务器集群中的多个虚拟服务节点;上述当前备选数量为多个备选数量中的任意一个备选数量。
步骤S31,根据多个虚拟服务节点中每个虚拟服务节点的哈希值,得到当前备选数量对应的哈希空间。
在具体实现时,多个虚拟服务节点中的每个虚拟服务节点都对应有预设编号,该预设编号可以是按照预设编号规则为每个虚拟服务节点设置的编号。根据虚拟服务节点的预设编号、预设哈希空间能够容纳的数值量和服务器集群包含的虚拟服务节点总数,可以得到虚拟服务节点的节点标识,也即是虚拟服务节点的节点标识包括:虚拟服务节点对应的游戏服务器的IP地址,加上,当前备选数量对应的哈希空间能够容纳的数值量与服务器集群包含的虚拟服务节点总数的商与虚拟服务节点的预设编号的乘积,用公式可表示为:
IP地址+能够容纳的数值量/虚拟服务节点总数*预设编号。
基于上述描述,每个虚拟服务节点的哈希值,均可通过下述方式计算得到:根据虚拟服务节点的节点标识,确定虚拟服务节点的MD5值;将该MD5值确定为虚拟服务节点的哈希值。也即是通过MD5算法得到节点标识对应的128位哈希值(也可称为MD5值)。
在具体实现时,游戏服务器对应的当前备选数量的虚拟服务节点,根据每个虚拟服务节点的哈希值,可以将该虚拟服务节点映射在预设哈希空间中,得到当前备选数量对应的哈希空间。
步骤32,计算每个游戏服务器对应的当前备选数量的虚拟服务节点,在当前备选数量对应的哈希空间的占用空间。
针对每个虚拟服务节点,在当前备选数量对应的哈希空间中,可以将当前虚拟服务节点在顺时针方向上相邻的虚拟服务节点之间的空间,或者将当前虚拟服务节点在逆时针方向上相邻的虚拟服务节点之间的空间,确定为当前虚拟服务节点的占用空间,具体地,上述确定占用空间的方式,可以与确定目标节点的方式相适应,如果是在顺时针方向上确定目标节点,占用空间需要在逆时针方向上确定;如果是在逆时针方向上确定目标节点,占用空间需要在顺时针方向上确定。根据游戏服务器对应的当前备选数量的虚拟服务节点对应的占用空间的加和,可以得到每个游戏服务器在当前备选数量对应的哈希空间的占用空间。
在具体实现时,上述步骤32可以通过下述方式实现:针对每个游戏服务器对应的每个虚拟服务节点,将当前虚拟服务节点,与当前备选数量对应的哈希空间中当前虚拟服务节点的前一个虚拟服务节点之间的空间,确定为当前虚拟服务节点的占用空间;针对每个游戏服务器,将当前游戏服务器对应的每个虚拟服务节点的占用空间相加,可得到当前游戏服务器对应的虚拟服务节点的占用空间。
在具体实现时,首先针对服务器集群中每个游戏服务器提供的当前备选数量的虚拟服务节点中的每个虚拟服务节点,计算当前虚拟服务节点的占用空间,也即是计算当前备选数量对应的哈希空间中,当前虚拟服务节点与当前虚拟服务节点的前一个虚拟服务节点之间的空间。得到每个虚拟服务节点的占用空间后,提取出每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间,针对于每个游戏服务器,将当前游戏服务器对应虚拟服务节点的占用空间相加,得到当前游戏服务器对应的虚拟服务节点的占用空间,进而得到每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间。
步骤33,根据每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间,确定服务器集群的负载方差。
在具体实现时,上述步骤33可以通过下述步骤40-42实现:
步骤40,计算每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间的平均值。也即是针对与每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间相加,然后将加和结果除以游戏服务器的数量,得到平均值。
步骤41,将每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间均除以平均值,得到多个负载因子;也即是得到每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间对应负载因子。
步骤42,对多个负载因子计算方差,得到服务器集群的负载方差。
对所有的负载因子计算方差,也即是首先将所有负载因子相加后再求平均,得到负载均值,然后将每个负载因子均与该负载均值作差,得到负载差值,在对每个负载差值进行平方后求和,可以得到服务器集群的负载方差。
通过上述步骤30~步骤42,可以得到游戏服务器提供的虚拟服务节点的多个备选数量中,每个备选数量对应的服务器集群的负载方差。根据每个备选数量对应的服务器集群的负载方差与备选数量的关系,可以得到虚拟服务节点的备选数量与服务器集群的负载方差的影响曲线,如图5所示,图5为在服务器集群中游戏服务器的数量为15的情况下绘制的影响曲线,从图5中可以看出,当游戏服务器的数量为15时,随着虚拟服务节点数量的增加服务器集群的负载方差逐渐减小,但是在虚拟服务节点数量大于50后变化不是十分显著,此时我们可以选取50作为游戏服务器提供的虚拟服务节点的数量;在一些实施例中,在确定目标节点时通常采用二分查找寻找的方式,因此选取虚拟服务节点服务的数量为1024/15,大约为68较为合适。
步骤S208,将上述待加载公会加载至目标节点对应的游戏服务器上。
上述游戏公会的加载方法,首先响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识;进而计算该待加载公会的公会标识的哈希值;再基于该哈希值,从预设哈希空间中确定待加载公会对应的目标节点;然后将该待加载公会加载至目标节点对应的游戏服务器上。该方式可实现不同的游戏公会在不同游戏服务器的分配,从而实现游戏公会分服的去中心化,均衡不同游戏服务器管理游戏公会的负载,并且该方式在游戏服务器发生宕机时,能够实现游戏服务器的动态迁移,提升玩家体验感。
本发明实施例还提供了另一种游戏公会的加载方法,该方法在上述实施例所述方法的基础上实现;该方法重点描述获取游戏公会加载请求对应的待加载公会的公会标识的具体过程(通过下述步骤S602-S612实现);如图6所示,该方法包括如下步骤:
步骤S602,接收玩家发送的游戏公会加载请求;该游戏公会加载请求中携带有玩家所属的游戏公会的公会标识。
上述游戏公会加载请求可以是申请加入公会、花钱提升公会等级、退出公会、踢出公会成员或者公会聊天信息等与游戏公会相关的请求,游戏公会请求中均携带有发送该游戏公会请求的玩家所属游戏公会的公会标识。
在具体实现时,由于游戏服务器的接口较多,会导致无法对游戏公会加载请求经过统一的调用函数进行处理,因此,为服务器集群中的每个游戏服务器设置了dispatch接口;每个游戏服务器均可以通过该dispatch接口,接收玩家发送的游戏公会加载请求。该dispatch接口也可称为调度接口,调度接口把每一个函数每一个属性都编上号,函数调用时,会把编号传给dispatch接口,以使dispatch接口调用相应的函数。
每个游戏服务器中均设置有处理游戏公会信息的公会进程,在公会进程中可通过操作类型标识公会进程的操作,并通过UnionManger分发给公会进程中对应的游戏公会,有关公会的所有游戏公会加载请求都通过公会进程的dispatch接口(相当于游戏服务器的dispatch接口)接收,因此很容易就能Hook到所有的游戏公会加载请求。其中,Hook通常是指所有的游戏公会加载请求都会经过同一个函数调用,在这个函数里能对所有请求都作统一的处理,比如接收到游戏公会加载请求时,该请求对应的游戏公会还没有加载,就会先缓存该游戏公会加载请求,然后加载游戏公会,加载完成后通过该游戏公会处理请求。
由于将不同的游戏公会加载请求对应不同的操作类型时,在后继的开发需求不断增加和变化的过程中,区分操作类型非常繁琐,因而,本申请可以将所有的游戏公会加载请求均默认为可能更改游戏公会信息的类型,从而方便机器处理。
步骤S604,判断玩家所属的游戏公会是否在预设缓存列表中;如果在预设缓存列表中,执行步骤S606;否则,执行步骤S608。
上述预设缓存列表中可以保存未运行在本游戏服务器(本游戏服务器为玩家所处游戏服对应的游戏服务器)上的、玩家曾经在本游戏服务器上访问过的游戏公会的公会标识,以及该游戏公会所运行在的游戏服务器的信息,该信息可以是游戏服务器的IP地址、服务器标识等;也可以保存运行在本游戏服务器上的游戏公户的公会标识。
步骤S606,将该游戏公会加载请求发送至预设缓存列表存储的运行玩家所属的游戏公会的游戏服务器,以使该游戏服务器处理该游戏公会加载请求。
当预设缓存列表存储的运行玩家所属的游戏公会的游戏服务器接收到该游戏公会加载请求时,该游戏服务器会该游戏加载请求对应的游戏公会是否为本游戏服务器上运行的游戏公会。如果是,缓存该游戏公会加载请求,加载游戏公会,加载游戏公会后处理缓存的该游戏公会加载请求;如果不是,将该游戏公会确定为待加载公会,从该游戏公会加载请求中获取公会标识,进而基于该公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点,并将目标节点对应的游戏服务器确定为加载待加载公会的游戏服务器,确定好之后,将该待加载公会以及该待加载公会对应的加载游戏服务器,关联保存到发送游戏公会加载请求的游戏服务器对应的预设缓存列表中。
步骤S608,缓存该游戏公会加载请求,将玩家所属的游戏公会确定为待加载公会,并从该游戏公会加载请求中获取公会标识;执行步骤S610。
如果玩家所属的游戏公会不在预设缓存列表中,缓存该游戏公会加载请求,从该游戏公会加载请求中获取待加载公会的公会标识,为后续分配游戏服务器做准备。
步骤S610,基于上述待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点。
步骤S612,将上述待加载公会加载至目标节点对应的游戏服务器上。
步骤S614,将上述待加载公会以及该待加载公会加载到的游戏服务器,关联保存到上述预设缓存列表中。
步骤S616,监听服务器集群中除游戏服务器之外的其他游戏服务器的运行状态。
在具体实现时,每个游戏服务器都有一个公会进程,每个公会进程上都有一个一致性哈希集群对象,每个一致性哈希集群对象都维护了其它游戏服务器上的公会进程的ID(该ID可以是游戏服务器的IP地址或者公会进程的标识等),也即是一致性哈希集群对象中保存有其他游戏服务上的公会进程的ID;该一致性Hash集群对象可以根据保存的其他游戏服务器上的公会进程的ID,监听其他游戏服务器的运行状态,由于游戏服务器的运行状态与其设置的公会进程的运行状态相关联,因此,监听其他游戏服务器的运行状态也即是监听公会进程的运行状态。具体地,其他游戏服务器会每隔固定时长(例如,10s)向本游戏服务器发送心跳RPC(Remote Procedure Call,远程过程调用),本游戏服务器可以根据接收到的心跳RPC判定其他游戏服务器的运行状态,也可以理解为在固定时长内,如果接收到某一游戏服务器的心跳RPC,表示该游戏服务器运行正常;如果未接到某一游戏服务器的心跳PRC,表示该游戏服务器停止运行,也可称为该游戏服务器宕机或者故障。
在具体实现时,上述一致性哈希集群对象可以执行上述步骤S514-S516,也即是可以为游戏公会通过待加载公会的公会标识对应的哈希值,为该待加载公会选择一个公会进程,该选择公会进程的过程可以理解为选择加载该待加载公会的游戏服务器的过程。
步骤S618,如果存在停止运行的游戏服务器,删除预设缓存列表中该停止运行的游戏服务器运行的游戏公会,以在接收到该游戏公会的公会加载请求时,为该游戏公会分配游戏服务器。
当接收到停止运行的游戏服务器运行的游戏公会的加载请求时,可以继续执行步骤S602,为游戏公会分配游戏服务器。该方式可以确定在游戏服务器停止运行时,在该游戏服务器下运行的游戏公会可以实现公会的动态迁移,避免影响玩家的正常使用,可以提升玩家的游戏体验感。
在具体实现时,当游戏公会没有被加载到游戏服务器上时,会保存在预设数据库中,如果接收到游戏公会加载请求时,首先判断该游戏公会是否已经被加载在游戏服务器的内存中,如果是,直接通过加载该游戏公会的游戏服务器处理游戏公会加载请求,如果该游戏公会正在被加载,缓存该游戏公会加载请求;如果该游戏公会没有被加载,缓存该游戏公会加载请求,并可以通过一致性哈希集群对象为该游戏公会分配加载的游戏服务器,游戏公会加载完成后,统一处理缓存的游戏公会加载请求。
服务器集群中的每个游戏服务器中均包含有定时器;当待加载公会加载至游戏服务器上后,游戏服务器需要监听待加载公会中玩家的上线和下线状态,当待加载公会中的玩家均下线时,开启定时器;如果该定时器定时结束后,待加载公会中的玩家均未上线,将待加载公会从加载至的游戏服务器转移至预设数据库中。设定定时器的目的是为了延迟游戏公会下线的时间,也即是一种缓存策略,是为了避免游戏公会频繁地在游戏服务器的内存和预设数据库之间转移。上述定时器的定时时长可以根据研发需求设置,例如,1分钟或者20分钟等。
当待加载公会加载至游戏服务器上后,还需要对待加载公会对应的信息进行存盘,在存盘时,可以针对待加载公会,监听当前时间与上次存盘时间的时间差是否大于第一时间阈值;如果大于,对待加载公会对应的信息进行存盘;监听待加载公会在第二时间阈值内,是否接收到玩家发送的请求指令;如果接收到,对请求指令进行存盘。该请求指令可以是上述游戏公会加载请求,也即是与游戏公会相关的请求。
上述第一时间阈值和第二时间阈值可以根据需求设定,例如,第一时间阈值可以设置为60分钟,第二时间阈值可以设置为15分钟等。在具体实现时,游戏服务器可以设置一个15分钟的重复定时器,游戏公会被加载后启动这个15分钟的重复定时器,如果距离上次存盘超过60分钟时(也即是上次存盘的时候会记录一个时间戳,15分钟的重复定时器每次执行时均会查看当前时间距离上次存盘的时间,该时间超过60分钟时),需要待加载公会对应的信息进行存盘,如果15分钟内接收到任何的请求指令,均需要立即对该请求指令进行存盘,该请求指令可以认为是能够修改更改游戏公会信息的请求,这种存盘策略能够有效降低游戏公会的信息存盘压力。
在一些实施例中,在游戏公会销毁时默认存盘,该游戏公会销毁通常是指该游戏公会下线(也即是保存在预设数据库中)、游戏公会中的玩家下线等。
在游戏公会的管理中,还存在游戏公会的信息同步问题,也即是通过游戏公会的请求指令修改了公会进程上的UnionEntity,但是并没有通知游戏公会中的各个成员玩家对应的公会进程上修改UnionEntity,这就会造成信息不一致的问题,同理客户端与服务端也是如此,因此需要解决公会信息同步的问题。上述UnionEntity可以是指管理游戏公会的信息的实体,因此其在客户端Avatar、服务端Avatar和UnionStub(也即是管理公会进程的实体)上的UnionProxy上都有一份,这三处公用UnionEntity来表示游戏公会的信息,游戏公会的信息同步实际上可以是指这三个UnionEntity之间的信息同步,其具体的结构如图7所示。
对于游戏公会的信息同步,只需要一个简单的广播操作就能完成这个任务,但是广播操作需要在游戏公会的玩家身上定义大量的处理操作的接口,每添加一个新的游戏公会的操作就要在客户端、服务端和UnionStub上都去添加对应的代码,这样十分的繁杂,因此可以广播游戏公会的变化信息,上述游戏公会的操作实际上是造成了游戏公会信息的变化,如果提供获取游戏公会信息的接口,然后广播游戏公会信息中发生变化的字段,整个公会信息同步就变得十分简洁,只需要几个不同粒度的接口就能同步所有游戏公会操作(相当于公会信息),这样添加新的游戏公会操作时就不用在客户端和服务端提供对应的同步接口了。上述几个不同粒度的接口可以是指客户端、服务端和公会进程接口中关于处理广播信息的接口,具体就是广播游戏公会信息的字段变化的接口,例如,广播游戏公会中成员玩家增删变化的接口,广播申请增删变化的接口等。
由于游戏公会中成员玩家的数量众多(通常超过50人),游戏公会成员的行为都需要同步到游戏公会的每个成员,成员登录、下线、游戏状态、聊天、活跃度变化等都会产生大量的信息同步RPC,必然会造成较大的通信开销。因此在公会进程上创建了全服唯一的指定路由接口,也即是游戏服务器集群中的每个游戏服务器上创建一个指定路由接口,该指定路由用于:服务器集群中的每个游戏服务器之间进行信息传输。
上述指定路由可以是StubRouter,该StubRouter是一个逻辑实体,位于公会进程上,用于合并与转发到不同游戏服务器之间的信息。该信息可以是game进程上的消息,该game进程通常是玩家对象所在服务进程,处理玩家游戏内逻辑的对象,玩家关于游戏公会的所有请求都是从game进程发出的,客户端给服务端发送的请求也是在game进程上处理的。关于游戏公会的所有请求包括拉取公会信息、加入公会、退出公会、公会聊天等。
如图8所示为游戏服务器之间进行信息传输的示意图,图8中的游戏服1、游戏服2和游戏服3,分别表示游戏服务器1、游戏服务器2和游戏服务器3,Game表示game进程。位于一个游戏服务器的玩家发送给位于另一个服务器的玩家的聊天信息统一通过StubRouter的接口(相当于上述指定路由接口)进行发送,也即是该StubRouter通过缓冲合并到不同游戏服务器的玩家调用,显著减少游戏服务器之间的通信次数,在收到其他游戏服务器的StubRouter转发过来的本游戏服务器的RPC调用时,缓冲合并到各个game进程的RPC调用,这样能显著减少通信频繁时的通信压力,两层的RPC缓冲与合并能降低通信带来的压力。
游戏公会推荐是公会***中重要的部分,需要向玩家推荐已经成立的游戏公会,让玩家可以选择加入。对于推荐游戏公会,希望每个游戏公会都有机会推荐给玩家,但所有的玩家都从数据库中随机捞取游戏公会数据显然会造成数据库访问的压力,因此需要一个推荐缓存池,该推荐缓存池可以采用LRU(Least Recently Used,最近最久未使用算法)策略管理,具体地,可以通过下述步骤50-52进行游戏公会推荐:
步骤50,将游戏公会保存在预设的推荐缓存池中;其中,该缓存池中包含有多个游戏公会。该推荐缓冲池中以双向链表的方式保存多个游戏公会,每个游戏公会都携带有时间戳、被推荐次数和公会信息。
步骤51,根据预设规则,从推荐缓存池中选取目标游戏公会,并将该目标游戏公会送给未加入该目标游戏公会的玩家。
步骤52,记录游戏公会的发送次数(相当于上述被推荐次数),将该发送次数大于预设阈值的游戏公会,从推荐缓存池中删除。
在具体实现时,上述推荐缓存池内的保存的游戏公会的数据有过期时间,数据的过期清除通过TICK方式随机选取一定数量(例如,25)进行检查,数据未被选中的概率随着TICK次数的增加逐渐降低0.001的抽查概率,在TICK10分钟后未被检查的概率小于1%。玩家获取推荐的游戏公会是直接从推荐缓存池中拉取的,为了确保短时间内推荐缓存池中的游戏公会不被频繁推荐给所有玩家,可以限制一个游戏公会被推荐给玩家的次数(将目标游戏公会发送给未加入该目标游戏公会的玩家的次数),而这个次数可以根据游戏公会人数定制,也可以根据需求设定为预设阈值,通过这种推荐方式,游戏公会将更加均匀的推荐给所有玩家。该游戏公会的推荐,通过在基于推荐缓存池内引入最大推荐次数,提高了推荐的随机性,降低了推荐对数据库的访问压力。
上述游戏公会的加载方法,基于一致性哈希集群为游戏公会进行动态分服,实现游戏公会分服的去中心化,均衡不同游戏服务器的负载,并在游戏服务器停止运行时能够实现游戏公会的动态迁移。对于游戏公会信息在玩家之间的同步采用指定路由接口对同步信息的RPC进程缓冲合并,从而显著降低游戏公会信息同步的负载。
对应于上述方法实施例,本发明实施例还提供了一种游戏公会的加载装置,该装置设置于游戏服务器,该游戏服务器隶属于由多个游戏服务器组成的服务器集群,该服务器集群中每个游戏服务器提供至少一个虚拟服务节点;如图9所示,该装置包括:
加载请求响应模块90,用于响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识。
目标节点确定模块91,用于基于待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点。
公会加载模块92,用于将待加载公会加载至目标节点对应的游戏服务器上。
上述游戏公会的加载装置,先响应于游戏公会加载请求,获取该游戏公会加载请求对应的待加载公会的公会标识;进而基于该待加载公会的公会标识,从服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;然后将待加载公会加载至目标节点对应的游戏服务器上。该方式中,服务器集群中每个游戏服务器提供有虚拟服务节点,基于待加载公会的公会标识,确定该待加载公会的目标节点,进而确定用于加载该待加载公会的服务器,该方式可以均衡不同游戏服务器上加载的游戏公会数量,同时当游戏服务器宕机时,该方式能够根据游戏公会加载请求,为宕机的游戏服务器加载的游戏公会重新分配游戏服务器,实现了游戏公会的动态迁移,可提高玩家的游戏体验感。
进一步地,上述目标节点确定模块91包括:哈希值计算单元,用于计算待加载公会的公会标识的哈希值;节点确定单元,用于基于哈希值,从预设哈希空间中确定待加载公会对应的目标节点;其中,预设哈希空间中包括:服务器集群中每个游戏服务器提供的虚拟服务节点,以及每个虚拟服务节点的哈希值。
具体地,上述节点确定单元,用于:从预设哈希空间中,确定与待加载公会的哈希值相匹配的哈希值;该相匹配的哈希值包括:在顺时针方向上,与待加载公会的哈希值相邻的、对应有虚拟服务节点的哈希值;将该相匹配的哈希值对应的虚拟服务节点确定为目标节点。
在具体实现时,上述服务器集群中每个游戏服务器提供的虚拟服务节点的数量相同;上述装置包括虚拟服务节点数量确定模块,包括:负载方差计算单元,用于获取游戏服务器提供的虚拟服务节点的多个备选数量,计算每个备选数量对应的服务器集群的负载方差;数量确定单元,用于将满足预设条件的负载方差对应的备选数量,确定为游戏服务器提供的虚拟服务节点的数量。
具体地,上述负载方差计算单元,用于:根据当前备选数量,得到服务器集群中的多个虚拟服务节点;根据多个虚拟服务节点中每个虚拟服务节点的哈希值,得到当前备选数量对应的哈希空间;计算每个游戏服务器对应的当前备选数量的虚拟服务节点,在当前备选数量对应的哈希空间的占用空间;根据每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间,确定服务器集群的负载方差。
进一步地,上述装置还包括虚拟服务节点哈希值确定模块,用于:根据虚拟服务节点的节点标识,确定虚拟服务节点的MD5值;将该MD5值确定为虚拟服务节点的哈希值;其中,虚拟服务节点的节点标识包括:虚拟服务节点对应的游戏服务器的IP地址,加上,当前备选数量对应的哈希空间能够容纳的数值量与服务器集群包含的虚拟服务节点总数的商与虚拟服务节点的预设编号的乘积。
进一步地,上述负载方差计算单元,还用于:针对每个游戏服务器对应的每个虚拟服务节点,将当前虚拟服务节点,与当前备选数量对应的哈希空间中当前虚拟服务节点的前一个虚拟服务节点之间的空间,确定为当前虚拟服务节点的占用空间;针对每个游戏服务器,将当前游戏服务器对应的每个虚拟服务节点的占用空间相加,得到当前游戏服务器对应的虚拟服务节点的占用空间。
进一步地,上述负载方差计算单元,还用于:计算每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间的平均值;将每个游戏服务器对应的当前备选数量的虚拟服务节点的占用空间均除以平均值,得到多个负载因子;对多个负载因子计算方差,得到服务器集群的负载方差。
进一步地,上述装置还包括状态监听模块,用于:将待加载公会以及待加载公会加载到的游戏服务器,关联保存到预设缓存列表中;监听服务器集群中除游戏服务器之外的其他游戏服务器的运行状态;如果存在停止运行的游戏服务器,删除预设缓存列表中停止运行的游戏服务器运行的游戏公会,当接收到停止运行的游戏服务器运行的游戏公会的加载请求时,继续运行上述加载请求响应模块90。
具体地,上述游戏服务器中包含有定时器;上述装置还包括公会转移模块,用于:当待加载公会中的玩家均下线时,开启定时器;如果该定时器定时结束后,待加载公会中的玩家未上线,将待加载公会从加载至的游戏服务器转移至预设数据库中。
进一步地,上述加载请求响应模块90,用于:接收玩家发送的游戏公会加载请求;该游戏公会加载请求中携带有玩家所属的游戏公会的公会标识;判断玩家所属的游戏公会是否在预设缓存列表中;如果不在预设缓存列表中,缓存加载请求,将玩家所属的游戏公会确定为待加载公会,并从游戏公会加载请求中获取公会标识。
具体地,上述游戏服务器包括dispatch接口;上述加载请求响应模块90,用于:通过dispatch接口,接收玩家发送的游戏公会加载请求。
进一步地,上述装置还包括存盘模块,用于:针对待加载公会,监听当前时间与上次存盘时间的时间差是否大于第一时间阈值;如果大于,对待加载公会对应的信息进行存盘;监听待加载公会在第二时间阈值内,是否接收到玩家发送的请求指令;如果接收到,对请求指令进行存盘。
进一步地,上述游戏服务器包括指定路由接口,该指定路由用于:服务器集群中的每个游戏服务器之间进行信息传输。
进一步地,上述装置还包括公会推荐模块,用于:将游戏公会保存在预设的推荐缓存池中;其中,该推荐缓存池中包含有多个游戏公会;根据预设规则,从推荐缓存池中选取目标游戏公会,并目标游戏公会发送给未加入该目标游戏公会的玩家;记录推荐缓存池中的游戏公会的发送次数,将发送次数大于预设阈值的游戏公会,从推荐缓存池中删除。
本发明实施例所提供的游戏公会的加载装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
本发明实施例还提供了一种服务器,如图10所示,该服务器包括处理器和存储器,该存储器存储有能够被处理器执行的机器可执行指令,该处理器执行机器可执行指令以实现上述游戏公会的加载方法。
进一步地,图10所示的服务器还包括总线102和通信接口103,处理器101、通信接口103和存储器100通过总线102连接。
其中,存储器100可能包含高速随机存取存储器(RAM,RandomAccessMemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该***网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器,包括中央处理器(CentralProcessingUnit,简称CPU)、网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器100,处理器101读取存储器100中的信息,结合其硬件完成前述实施例的方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使该处理器实现上述游戏公会的加载方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和/或电子设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (15)

1.一种游戏公会的加载方法,其特征在于,所述方法应用于游戏服务器,所述游戏服务器隶属于由多个游戏服务器组成的服务器集群,所述服务器集群中每个游戏服务器提供至少一个虚拟服务节点;所述方法包括:
响应于游戏公会加载请求,获取所述游戏公会加载请求对应的待加载公会的公会标识;
基于所述待加载公会的公会标识,从所述服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点;
将所述待加载公会加载至所述目标节点对应的游戏服务器上。
2.根据权利要求1所述的方法,其特征在于,所述基于所述待加载公会的公会标识,从所述服务器集群中每个游戏服务器提供的虚拟服务节点中确定目标节点的步骤,包括:
计算所述待加载公会的公会标识的哈希值;
基于所述哈希值,从预设哈希空间中确定所述待加载公会对应的目标节点;其中,所述预设哈希空间中包括:所述服务器集群中每个游戏服务器提供的虚拟服务节点,以及每个所述虚拟服务节点的哈希值。
3.根据权利要求2所述的方法,其特征在于,所述基于所述哈希值,从预设哈希空间中确定所述待加载公会对应的目标节点的步骤,包括:
从所述预设哈希空间中,确定与所述待加载公会的哈希值相匹配的哈希值;所述相匹配的哈希值包括:在顺时针方向上,与所述待加载公会的哈希值相邻的、对应有虚拟服务节点的哈希值;
将所述相匹配的哈希值对应的虚拟服务节点确定为目标节点。
4.根据权利要求1所述的方法,其特征在于,所述服务器集群中每个所述游戏服务器提供的虚拟服务节点的数量相同;所述游戏服务器提供的虚拟服务节点的数量通过下述方式确定:
获取所述游戏服务器提供的所述虚拟服务节点的多个备选数量,计算每个所述备选数量对应的所述服务器集群的负载方差;
将满足预设条件的所述负载方差对应的备选数量,确定为所述游戏服务器提供的虚拟服务节点的数量。
5.根据权利要求4所述的方法,其特征在于,所述计算每个所述备选数量对应的所述服务器集群的负载方差的步骤,包括:
针对所述多个备选数量中的每个备选数量,执行下述操作:
根据当前备选数量,得到所述服务器集群中的多个虚拟服务节点;
根据所述多个虚拟服务节点中每个所述虚拟服务节点的哈希值,得到所述当前备选数量对应的哈希空间;
计算每个所述游戏服务器对应的所述当前备选数量的虚拟服务节点,在所述当前备选数量对应的哈希空间的占用空间;
根据每个所述游戏服务器对应的所述当前备选数量的虚拟服务节点的占用空间,确定所述服务器集群的负载方差。
6.根据权利要求5所述的方法,其特征在于,所述虚拟服务节点的哈希值,通过下述方式计算得到:
根据所述虚拟服务节点的节点标识,确定所述虚拟服务节点的MD5值;
将所述MD5值确定为所述虚拟服务节点的哈希值;
其中,所述虚拟服务节点的节点标识包括:所述虚拟服务节点对应的游戏服务器的IP地址,加上,所述当前备选数量对应的哈希空间能够容纳的数值量与所述服务器集群包含的虚拟服务节点总数的商与所述虚拟服务节点的预设编号的乘积。
7.根据权利要求5所述的方法,其特征在于,计算每个所述游戏服务器对应的所述当前备选数量的虚拟服务节点,在所述当前备选数量对应的哈希空间的占用空间的步骤,包括:
针对每个所述游戏服务器对应的每个虚拟服务节点,将当前虚拟服务节点,与所述当前备选数量对应的哈希空间中所述当前虚拟服务节点的前一个虚拟服务节点之间的空间,确定为所述当前虚拟服务节点的占用空间;
针对每个所述游戏服务器,将当前游戏服务器对应的每个虚拟服务节点的占用空间相加,得到所述当前游戏服务器对应的虚拟服务节点的占用空间。
8.根据权利要求5所述的方法,其特征在于,根据每个所述游戏服务器对应的所述当前备选数量的虚拟服务节点的占用空间,确定所述服务器集群的负载方差的步骤,包括:
计算每个所述游戏服务器对应的所述当前备选数量的虚拟服务节点的占用空间的平均值;
将每个所述游戏服务器对应的所述当前备选数量的虚拟服务节点的占用空间均除以所述平均值,得到多个负载因子;
对所述多个负载因子计算方差,得到所述服务器集群的负载方差。
9.根据权利要求1所述的方法,其特征在于,将所述待加载公会加载至所述目标节点对应的游戏服务器上的步骤之后,所述方法还包括:
将所述待加载公会以及所述待加载公会加载到的游戏服务器,关联保存到预设缓存列表中;
监听所述服务器集群中除所述游戏服务器之外的其他游戏服务器的运行状态;
如果存在停止运行的游戏服务器,删除所述预设缓存列表中停止运行的游戏服务器运行的游戏公会,当接收到停止运行的游戏服务器运行的游戏公会的加载请求时,继续执行响应于游戏公会加载请求,获取所述游戏公会加载请求对应的待加载公会的公会标识的步骤。
10.根据权利要求1所述的方法,其特征在于,所述游戏服务器中包含有定时器;所述将所述待加载公会加载至所述目标节点对应的游戏服务器上的步骤之后,所述方法还包括:
当所述待加载公会中的玩家均下线时,开启所述定时器;
如果所述定时器定时结束后,所述待加载公会中的玩家未上线,将所述待加载公会从加载至的所述游戏服务器转移至预设数据库中。
11.根据权利要求1所述的方法,其特征在于,响应于游戏公会加载请求,获取所述游戏公会加载请求对应的待加载公会的公会标识的步骤,包括:
接收玩家发送的游戏公会加载请求;所述游戏公会加载请求中携带有所述玩家所属的游戏公会的公会标识;
判断所述玩家所属的游戏公会是否在预设缓存列表中;
如果不在所述预设缓存列表中,缓存所述加载请求,将所述玩家所属的游戏公会确定为所述待加载公会,并从所述游戏公会加载请求中获取所述公会标识。
12.根据权利要求1所述的方法,其特征在于,所述将所述待加载公会加载至所述目标节点对应的游戏服务器上的步骤之后,所述方法还包括:
针对所述待加载公会,监听当前时间与上次存盘时间的时间差是否大于第一时间阈值;如果大于,对所述待加载公会对应的信息进行存盘;
监听所述待加载公会在第二时间阈值内,是否接收到玩家发送的请求指令;如果接收到,对所述请求指令进行存盘。
13.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将游戏公会保存在预设的推荐缓存池中;其中,所述推荐缓存池中包含有多个游戏公会;
从所述推荐缓存池中选取目标游戏公会,并将所述目标游戏公会发送给未加入所述目标游戏公会的玩家;
记录所述推荐缓存池中的游戏公会的发送次数,将所述发送次数大于预设阈值的游戏公会,从所述推荐缓存池中删除。
14.一种服务器,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现权利要求1至13任一项所述的游戏公会的加载方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,所述计算机可执行指令促使所述处理器实现权利要求1至13任一项所述的游戏公会的加载方法。
CN202010840501.6A 2020-08-19 2020-08-19 游戏公会的加载方法和服务器 Pending CN111905362A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010840501.6A CN111905362A (zh) 2020-08-19 2020-08-19 游戏公会的加载方法和服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010840501.6A CN111905362A (zh) 2020-08-19 2020-08-19 游戏公会的加载方法和服务器

Publications (1)

Publication Number Publication Date
CN111905362A true CN111905362A (zh) 2020-11-10

Family

ID=73279702

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010840501.6A Pending CN111905362A (zh) 2020-08-19 2020-08-19 游戏公会的加载方法和服务器

Country Status (1)

Country Link
CN (1) CN111905362A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112506647A (zh) * 2020-11-19 2021-03-16 杭州电魂网络科技股份有限公司 有状态服务器负载均衡的方法、***、装置和存储介质
CN113713376A (zh) * 2021-08-30 2021-11-30 腾讯科技(深圳)有限公司 互动信息的显示方法、装置及电子设备

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050198335A1 (en) * 2001-02-06 2005-09-08 Microsoft Corporation Distributed load balancing for single entry-point systems
WO2007133124A1 (en) * 2006-05-12 2007-11-22 Acei Ab Gaming system with failover and takeover capability
US20080051200A1 (en) * 2006-08-24 2008-02-28 Nhn Corporation System and method for transmitting p2p message in multi-access online game
CN108499100A (zh) * 2018-03-30 2018-09-07 南京工业大学 一种基于边缘计算的云游戏错误恢复方法及***
WO2018215942A1 (en) * 2017-05-23 2018-11-29 Constructive Labs Server system for processing a virtual space
CN109513206A (zh) * 2017-09-19 2019-03-26 北京金山云网络技术有限公司 网络游戏的网络架构及用于网络游戏的数据转发方法
CN109621430A (zh) * 2018-12-12 2019-04-16 网易(杭州)网络有限公司 游戏服务端***、游戏控制方法、装置、介质及电子设备
CN110841282A (zh) * 2019-10-30 2020-02-28 腾讯科技(深圳)有限公司 数据处理方法和装置、存储介质及电子装置
CN111338806A (zh) * 2020-05-20 2020-06-26 腾讯科技(深圳)有限公司 一种业务控制方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050198335A1 (en) * 2001-02-06 2005-09-08 Microsoft Corporation Distributed load balancing for single entry-point systems
WO2007133124A1 (en) * 2006-05-12 2007-11-22 Acei Ab Gaming system with failover and takeover capability
US20080051200A1 (en) * 2006-08-24 2008-02-28 Nhn Corporation System and method for transmitting p2p message in multi-access online game
WO2018215942A1 (en) * 2017-05-23 2018-11-29 Constructive Labs Server system for processing a virtual space
CN109513206A (zh) * 2017-09-19 2019-03-26 北京金山云网络技术有限公司 网络游戏的网络架构及用于网络游戏的数据转发方法
CN108499100A (zh) * 2018-03-30 2018-09-07 南京工业大学 一种基于边缘计算的云游戏错误恢复方法及***
CN109621430A (zh) * 2018-12-12 2019-04-16 网易(杭州)网络有限公司 游戏服务端***、游戏控制方法、装置、介质及电子设备
CN110841282A (zh) * 2019-10-30 2020-02-28 腾讯科技(深圳)有限公司 数据处理方法和装置、存储介质及电子装置
CN111338806A (zh) * 2020-05-20 2020-06-26 腾讯科技(深圳)有限公司 一种业务控制方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112506647A (zh) * 2020-11-19 2021-03-16 杭州电魂网络科技股份有限公司 有状态服务器负载均衡的方法、***、装置和存储介质
CN113713376A (zh) * 2021-08-30 2021-11-30 腾讯科技(深圳)有限公司 互动信息的显示方法、装置及电子设备
CN113713376B (zh) * 2021-08-30 2023-07-14 腾讯科技(深圳)有限公司 互动信息的显示方法、装置及电子设备

Similar Documents

Publication Publication Date Title
US9911148B2 (en) Querying for business service processing status information
CN110519183B (zh) 一种节点限速的方法、装置、电子设备及存储介质
CN110677492B (zh) 一种访问请求处理方法、装置、电子设备及存储介质
CN111905362A (zh) 游戏公会的加载方法和服务器
CN111585887B (zh) 基于多个网络的通信方法、装置、电子设备及存储介质
JP6582445B2 (ja) シンクライアントシステム、接続管理装置、仮想マシン稼働装置、方法、および、プログラム
CN112615784B (zh) 一种转发报文的方法、装置、存储介质和电子设备
GB2579635A (en) A node testing method and apparatus for a blockchain system
JP2016527780A (ja) リースエージェントシステム間での制作者システムの分配
US20070265976A1 (en) License distribution in a packet data network
CN113206877A (zh) 一种会话保持方法及装置
CN111984295B (zh) 一种区块链软件全网更新方法、存储介质及电子设备
CN111405052A (zh) 基于端口预测的p2p穿透方法、电子设备及介质
CN113361913A (zh) 一种通信业务编排方法、装置、计算机设备及存储介质
CN111432039A (zh) Cdn中数据请求方法、装置、设备和cdn节点
CN113680074B (zh) 业务信息的推送方法、装置、电子设备及可读介质
US20170104683A1 (en) Dynamically segmenting traffic for a/b testing in a distributed computing environment
CN109600254A (zh) 全链路日志的生成方法及相关***
CN109347766B (zh) 一种资源调度的方法及装置
CN109981696B (zh) 一种负载均衡方法、装置及设备
CN114173396B (zh) 终端联网时间的确定方法和装置、电子设备和存储介质
CN112732765B (zh) 一种实验路径的确定方法及装置、电子设备
CN114048033A (zh) 跑批任务的负载均衡方法、装置及计算机设备
WO2015196769A1 (zh) Iptv***中的数据处理方法及网元设备
CN117459597A (zh) 基于哈希环的请求处理方法及装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination