一种网络游戏服务器动态负载平衡的方法

文档序号:7891062阅读:230来源:国知局
专利名称:一种网络游戏服务器动态负载平衡的方法
技术领域
本发明涉及一种在网络游戏服务器中动态分配支持网络游戏运行所需 负载的方法。
背景技术
网络游戏需要支持大量的玩家同时在线。 一台服务器的负载能力有 限,因此需要很多台网络游戏服务器同时为玩家服务。为了把负载均匀分配 到这些服务器上,目前的网络游戏把游戏划分成一些场地,例如小镇、国家、 房间等。这些场地被分配给各个服务器。每台服务器负责它所承担的场地上 的玩家以及非玩家角色的运行,以及系统消息的广播等任务。这些场地分配 给某个服务器后,虽然玩家能在不同的场地中行走,并因此在不同的服务器 间移动,但支持场地运行所用的服务器却不能在游戏运行时分配给其它服务 器。因此目前的方案不得不给这些场地准备这些场地上玩家人数最多时需要 的服务器资源。由于玩家可以在各个场地上行走,因此一个场地上的玩家也 会有时多有时少。在场地上的玩家人数多时会出现其他玩家无法进入这块场
地等问题,而在场地上的玩家人数少时,服务器资源又被浪费了。

发明内容
本发明的目的是提出一种在网络游戏服务器间动态地分配支持某一块 场地运行所用的服务器,以便在网络游戏服务器中动态分配负载的方法。基
于这种思想,本发明提出了如下的技术方案
一种网络游戏服务器动态负载平衡的方法。用于具有服务器和客户端的 网络游戏系统,其特征在于,所述的方法包括步骤
步骤1:服务器一支持网络游戏中某一块场地的一部分或全部状态的运 行,这里称这些状态称为状态一;.
步骤2:服务器一把状态一的一部分或全部的状态,这里称它为状态二,传送给服务器二,由服务器二支持状态二的运行;
步骤3:在服务器一需要获取或设置状态二的状态时,需要请求服务器 二来执行;
步骤4:在服务器二需要获取或设置状态一中除状态二外其它的状态, 这里称它为状态三时,需要请求服务器一来执行。
优选的,所述的网络游戏服务器动态负载平衡的方法,其特征在于,所 述的状态二和/或状态三还可以进行更多的拆分,以使用更多的服务器支持一 块场;也的运4亍。
优选的,所述的网络游戏服务器动态负载平衡的方法,其特征在于,在 不停止网络游戏运行的情况下,动态加入更多的服务器。
优选的,所述的网络游戏服务器动态负载平衡的方法,其特征在于,所 述的状态二和状态三可以合并在一起,由一台服务器支持它们的运行。
下面来具体地介绍一下本方案。我们知道有很多游戏可以保存游戏进 度。保存某一时刻游戏的状态(游戏的状态是指某一时刻所有对游戏进行有 影响的数据,例如当时的时间、所有游戏中人物的位置、方向、血的数值、 挥刀还是站立等,以及所有物品和输入设备,例如键盘鼠标等的状态)。在 以后装入这个状态。即使是在保存这个状态不同的计算机上,也可以使游戏 完全恢复到保存时的状态,从而从那个状态继续游戏。如果我们把某一台服 务器Cl上的某一块场地SC1的状态传送给另一台服务器C2,就可以把支 持SC1运行所用的服务器从Cl移到C2。然后SC1中的所有客户端CL1需 要把他们游戏所用的服务器从C1改换到C2。服务器上一块场地的状态包括 这块场地上所有玩家以及非玩家角色在服务器端上表示的状态、这块场地和 其它场地的联系、场地上宝物、怪物的定期重新生成等所有对游戏进行有影 响的数据。那么如何把网络游戏客户端所用的服务器从一台移到另 一台呢? 有很多种方法。最简单的方法是CLl仍然和Cl连接。CI把SCI的状态传送给C2,由 C2继续支持SCI的运行。Cl把从CLl接收的数据Dl传送给C2。 C2把需 要发送给CL1的数据D2先发送给C1,再由C1把D2传送给CL1。但是这 种方法由于D1、 D2需要由C1中转,会给C1带来很大不必要的负担。
方法2是Cl在时间Tl保存SCI的状态Sl,并把SI传送给C2。 Cl 给CLl发送消息D3,要求CLl和C2连接,并改为向C2传输Dl以及从 C2接收D2。由于网络游戏服务器端和客户端是异步运行的,所以在Tl时 间之后,CLl接收到D3之前,CLl仍然会向Cl发送游戏数据D4。 Cl需 要把D4转发给C2。 C2要先接收并处理完D4后才能继续处理CLl直接发 送给它的游戏数据。
方法3是CLl保存发送给Cl的数据D5,并给D5中的数据编号。Cl 保存SC1的状态S2,并把S2传送给C2。 C1把此时已经处理完的D5中的 数据的编号SRI发送给CLl,并要求CLl和C2连接。Cl丢弃之后再从CLl 接收到的D5。 CLl把D5中序号在SRI之后的数据重新向C2发送一遍。
其中方法2是本发明推荐的方法。
在SCI从Cl搬到C2后,如果服务器组中的其它服务器需要获取或设 置SC1中的数据,也要改为通过C2获取或设置,其方法也和CLl把它们的 服务器从Cl改为C2 —样。
现在我们已经能把支持一个场地运行所用的服务器整个地从一台服务 器换到另一台了。如果更进一步,我们把场地SC2中的一部分状态,例如一 部分玩家和非玩家角色Rl的状态S3从一台服务器C3搬到另一台服务器 C4,由C4来支持Rl的运行以及计算和确定Rl的状态。未搬到C4的那些 状态S5仍然由C3计算和确定。这样我们就把能支持SC2运行所需的负载 分摊到两台服务器。在C3需要获取S3的状态时,需要请求C4把S3的状 态传送给它。在C3希望修改S3的状态时,也需要请求C4来执行。注意,应该把C3修改S3的状态看成是请求而非强制或确定地执行。因为有很多因 素导致这种请求不成功。例如C3上的一个玩家Pl向C4上的一个玩家P2 射击。但是C3所知道的P2的状态实际上是滞后于C4的。因为C4在P2的 状态S4改变的时候需要把S4传送给C3。但是通过网络传送数据必然会有 延迟,也就导致C3所知道的P2的状态必然滞后于C4。假如Pl发出射击 P2的请求后,C4先收到另一个玩家P3射击P2的请求,并且判定P3杀死 了 P2,那么C4就应该把杀死P2所获得的分数加给P3。在C4收到Pl射击 P2的请求后,只能判定P1射击了 P2的尸体而不得分。因此,在C3接收到 Pl射击P2的请求后,并不应该修改它所知道的P2的状态,而应该等待C4 给它状态改变的通知。并且只有在C4告诉C3P1杀死了 P2后才给P1加上
在场地上的玩家人数增加时,我们还可以把S3和S5进行更多的拆分。 每一台服务器负责分配给它的一部分状态的运行。在需要获取或设置游戏中 由其它服务器负责的那部分状态时,需要请求其它服务器来执行。通过这种 方法,我们就可以让一块场地支持无限多的玩家同时游戏。
我们还可以在一个网络游戏刚开始运营时只使用少量的服务器。随着游 戏中的玩家越来越多,在不停止游戏运行的情况下,动态地增加服务器。因 此本发明具有很强的可扩展性。
本发明的有益效果是可以在网络游戏服务器中均勻地分配支持游戏运 行所需的负载,并且允许任意数量的玩家在同一块场地中进行游戏。
具体实施例方式
实施例1
在本优选实施例中,由若干台服务器组成一个网络游戏服务器组。整个 网络游戏被划分成若干个国家。每台服务器负责一个或者几个国家的运行。 在游戏开始运行前,所有的国家被平均分配给每台服务器。在游戏运行时, 每台服务器不断地监测本服务器的CPU (计算机中的中央处理单元CentralProcessing Unit)占用率。当某一 台服务器SVR1发现自己的CPU占用率连 续10秒超过90%时,它查询服务器组中其它所有服务器最近10秒的CPU 占用率。如果发现另一台服务器SVR2最近10秒的CPU占用率一直低于 80%, SRV1就把它所承担的一个国家SCI的状态SI传送给SVR2,由SVR2 继续负责SCI的运行。同时SVR1通知SCI上所有的客户端CL1,要求CL1 和SVR2连接,并把它们的游戏服务器改为SVR2。 SVR1还通知服务器中 所有其它的服务器,在需要获取和设置SC1的状态时,改为和SVR2联系。
实施例2
在本优选实施例中,同样由若干台服务器组成一个网络游戏服务器组, 但是整个网络游戏只由一个被称为某大陆的场地SCI组成。在游戏开始运行 时只有一台服务器SVR1支持这一场地的运行。SVR1不断监测本服务器的 CPU占用率。随着玩家不断地加入游戏,当CPU占用率连续10秒超过90% 时,SVR1把SC1平均分割成两块B1和B2。这种分割只是为了把服务器上 的玩家分成两部分而进行的,对玩家来说并不可见。玩家仍然可以在B1和 B2之间自由走动。SVR1把B2上所有玩家的状态,以及支持这些玩家游戏 所需的一些系统数据,例如系统定期的消息广播等传送给另 一台空闲的服务 器SVR2。然后让B2上的所有玩家把他们的游戏服务器改为SVR2。当SVR1 需要获取和设置B2所负责的玩家Pl的状态时,SVR1把请求发送给SVR2, 由SVR2设置Pl的状态或者把Pl的状态返回给SVR1。同样,当SVR2需 要获取或设置SVR1所负责的玩家的状态时,也需要请求SVR1来执行。
随着Bl上的玩家越来越多,SVR1将再次把Bl分割为B3和B4。把 B4交给另一台较空闲的服务器来支持。对于B2也是一样。这样,我们就可 以用 一块场地支持任意多的玩家同时游戏。
随着场地被不断地分割,如果相邻的两块某一时刻都只有很少的玩家, 就可以把这两块交给同一个服务器来支持他们的运行,并4巴这两块合并为一 个大块。用这种方法,我们就可以动态地在服务器间分配支持玩家运行所需 的负荷了。以上所述的实施例,只是本发明较优选的具体实施方式
的一种。本领域 的技术人员在本发明技术的方案范围内,进行的通常变化和替换,都应包含 在本发明的保护范围内。
权利要求
1. 一种网络游戏服务器动态负载平衡的方法;用于具有服务器和客户端的网络游戏系统;其特征在于,所述的方法包括步骤步骤1服务器一支持网络游戏中某一块场地的一部分或全部状态的运行,这里称这些状态称为状态一;步骤2服务器一把状态一的一部分或全部的状态,这里称它为状态二,传送给服务器二,由服务器二支持状态二的运行;步骤3在服务器一需要获取或设置状态二的状态时,需要请求服务器二来执行;步骤4在服务器二需要获取或设置状态一中除状态二外其它的状态,这里称它为状态三时,需要请求服务器一来执行。
2. 根据权利要求1所述的网络游戏服务器动态负载平衡的方法,其特征 在于,所述的状态二和/或状态三还可以进行更多的拆分,以使用更多的服务 器支持一块场地的运行。
3. 根根据权利要求2所述的网络游戏服务器动态负载平衡的方法,其特 征在于,在不停止网络游戏运行的情况下,动态加入更多的服务器。
4. 根据权利要求2所述的网络游戏服务器动态负载平衡的方法,其特征 在于,所述的状态二和状态三可以合并在一起,由一台服务器支持它们的运行。
全文摘要
本发明提出了一种在网络游戏运行时,把支持一块场地运行所用的服务器从一台搬到另一台,以及动态改变网络游戏中支持某一块场地运行所用的服务器数,以达到在服务器间动态分配负载的目的的方法。所使用的方法是把一块场地中的一部分或全部的状态传送给另一台服务器,由另一台服务器支持这部分状态的运行。原服务器需要获取或设置新服务器上的状态时,请求新的服务器来执行。新服务器需要获取或设置原服务器上的状态时,通过请求原服务器来执行。
文档编号H04L29/06GK101533359SQ200810084638
公开日2009年9月16日 申请日期2008年3月14日 优先权日2008年3月14日
发明者荣 王 申请人:荣 王
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1