專利名稱:一種網絡游戲服務器動態負載平衡的方法
技術領域:
本發明涉及一種在網絡游戲服務器中動態分配支持網絡游戲運行所需 負載的方法。
背景技術:
網絡游戲需要支持大量的玩家同時在線。 一臺服務器的負載能力有 限,因此需要很多臺網絡游戲服務器同時為玩家服務。為了把負載均勻分配 到這些服務器上,目前的網絡游戲把游戲劃分成一些場地,例如小鎮、國家、 房間等。這些場地被分配給各個服務器。每臺服務器負責它所承擔的場地上 的玩家以及非玩家角色的運行,以及系統消息的廣播等任務。這些場地分配 給某個服務器后,雖然玩家能在不同的場地中行走,并因此在不同的服務器 間移動,但支持場地運行所用的服務器卻不能在游戲運行時分配給其它服務 器。因此目前的方案不得不給這些場地準備這些場地上玩家人數最多時需要 的服務器資源。由于玩家可以在各個場地上行走,因此一個場地上的玩家也 會有時多有時少。在場地上的玩家人數多時會出現其他玩家無法進入這塊場
地等問題,而在場地上的玩家人數少時,服務器資源又被浪費了。
發明內容
本發明的目的是提出一種在網絡游戲服務器間動態地分配支持某一塊 場地運行所用的服務器,以便在網絡游戲服務器中動態分配負載的方法。基
于這種思想,本發明提出了如下的技術方案
一種網絡游戲服務器動態負載平衡的方法。用于具有服務器和客戶端的 網絡游戲系統,其特征在于,所述的方法包括步驟
步驟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日
發明者榮 王 申請人:榮 王