Author: Fox
原文地址:http://www.shnenglu.com/Fox/archive/2007/12/16/game_world_architecture.html
一個MMORPG(Massively Multiplayer Online Role Playing Game)的架構(gòu)包含客戶端和服務(wù)器兩部分。客戶端主要涉及計算機圖形學(xué)、物理學(xué)、多媒體技術(shù)等,服務(wù)器主要涉及網(wǎng)絡(luò)通信技術(shù)、數(shù)據(jù)庫技術(shù),而人工智能、操作系統(tǒng)等計算機基礎(chǔ)學(xué)科知識的應(yīng)用體現(xiàn)在MMORPG開發(fā)過程中的方方面面。
一、游戲世界的劃分
理想狀態(tài)的游戲世界僅由一個完整的場景組成,在《魔獸爭霸 III 》、《 CS 》這樣的單機游戲中,所有玩家位于該場景中,在理論上,位于該場景中的任意玩家都可以看到游戲中所有玩家并與之交互,出于公平性和游戲性(而不是技術(shù)上)的考慮,游戲中并不會這樣做。
然而,目前的 MMORPG 中,幾乎沒有任何一款可以做到整個游戲世界只包含一個場景,因為在一款 MMORPG 中,同時在線的玩家數(shù)量成百上千,甚至是數(shù)萬人同時在一個游戲世界中交互。以現(xiàn)在的網(wǎng)絡(luò)技術(shù)和計算機系統(tǒng),還無法為這么多玩家的交互提供即時處理。因此, MMORPG 的游戲世界被劃分為大小不等、數(shù)量眾多的場景,游戲服務(wù)器對于這些場景的處理分為分區(qū)和無縫兩種。
在分區(qū)式服務(wù)器中,一個場景中的玩家無法看到另一個場景中的玩家,當(dāng)玩家從一個場景到另外一個場景跨越時,都有一個數(shù)據(jù)轉(zhuǎn)移和加載的過程(尤其是從一個分區(qū)服務(wù)器跨越到另外一個服務(wù)器時),玩家都有一個等待的時間,在這段時間內(nèi),服務(wù)器的主要工作是實現(xiàn)跨越玩家數(shù)據(jù)的轉(zhuǎn)移和加載以及后一個場景中玩家、 NPC 等數(shù)據(jù)的傳輸,客戶端的主要工作是實現(xiàn)新場景資源的加載和服務(wù)器通信。主要時間的長短主要取決于后一個場景中資源數(shù)據(jù)的大小。分區(qū)式服務(wù)器的優(yōu)點主要是各分區(qū)服務(wù)器保持相對獨立,缺點是游戲空間不夠大,而且,一旦某個分區(qū)服務(wù)器中止服務(wù),位于該服務(wù)器上的所有玩家將失去連接。
所謂無縫服務(wù)器,玩家?guī)缀醪煊X不到場景之間的這種切換,在場景間沒有物理上的屏障,對于玩家而言,眾多場景構(gòu)成了一個巨大的游戲世界。場景之間,甚至服務(wù)器之間“沒有了”明確的界線。因此,無縫服務(wù)器為玩家提供了更大的游戲空間和更友好的交互,實現(xiàn)了動態(tài)邊界的無縫服務(wù)器甚至可以在某個服務(wù)器中止服務(wù)時,按一定策略將負(fù)載動態(tài)分散到其他服務(wù)器。因此,無縫服務(wù)器在技術(shù)上要比分區(qū)服務(wù)器更加復(fù)雜。
目前國內(nèi)上市的 MMORPG ,大多采用分區(qū)式服務(wù)器,做到無縫世界的主要有《完美世界》和《天下貳》等,國外的 MMORPG 中,像《魔獸世界》、《 EVE 》等,都實現(xiàn)了無縫世界。
無縫服務(wù)器與分區(qū)式服務(wù)器在技術(shù)上的主要區(qū)別是,當(dāng)位于場景 S1 中的玩家 P1 處于兩個(甚至更多)場景 S1 、 S2 的邊界區(qū)域內(nèi)時,要保證 P1 能夠看到場景 S2 中建筑、玩家、 NPC 等可感知對象。而且邊界區(qū)域的大小要大于等于 P1 可感知的范圍,否則就可能發(fā)生 S2 中的可感知對象突然閃現(xiàn)在 P1 視野中的異常。
無疑,無縫世界為玩家提供了更人性化和更具魅力的用戶體驗。
二、無縫世界游戲服務(wù)器的整體架構(gòu)
MMORPG 的服務(wù)器架構(gòu)從功能上主要劃分為三種:
1、 登錄服務(wù)器( Login Server )
登錄服務(wù)器用于玩家驗證登錄,并根據(jù)系統(tǒng)記錄玩家信息得到其所在節(jié)點服務(wù)器,并通過世界服務(wù)器為登錄玩家和對應(yīng)節(jié)點服務(wù)器建立連接。
2、 世界服務(wù)器( World Server )
世界服務(wù)器將整個游戲世界劃分成不同場景,將所有場景按一定策略分配給節(jié)點服務(wù)器,并對節(jié)點服務(wù)器進(jìn)行管理。世界服務(wù)器的另一功能是與登錄服務(wù)器交互。因此,世界服務(wù)器是登錄服務(wù)器、節(jié)點服務(wù)器的溝通橋梁,當(dāng)然,一旦玩家登錄成功,世界服務(wù)器將主要處理節(jié)點服務(wù)器間的通信。因此,世界服務(wù)器對于玩家是透明的。
3、 節(jié)點服務(wù)器( Node Server )
節(jié)點服務(wù)器負(fù)責(zé)管理位于該節(jié)點的所有玩家、 NPC 的所有交互,在無縫世界游戲中,由于邊界區(qū)域的存在,一個節(jié)點服務(wù)器甚至要處理相鄰節(jié)點上位于邊界區(qū)域的玩家和 NPC 的信息。
在具體實現(xiàn)上,不同的 MMORPG 為了便于管理,可能還會具有 AI 服務(wù)器、日志服務(wù)器、數(shù)據(jù)庫緩存服務(wù)器、代理服務(wù)器等。
三、 無縫世界游戲服務(wù)器的主要技術(shù)需求
1、 編程語言( C/C++ 、 SQL 、 Lua 、 Python )
2、 圖形庫( Direct 3D 、 OpenGL )
3、 網(wǎng)絡(luò)通信( WinSock 、 BSD Socket ,或者 ACE )
4、 消息、事件、多線程、 GUI
5、 OS
三、無縫世界游戲服務(wù)器需要解決的主要問題
1、 資源管理
無論是服務(wù)器還是客戶端,都涉及到大量資源:玩家數(shù)據(jù)、 NPC 數(shù)據(jù)、戰(zhàn)斗公式、模型資源、通信資源等。當(dāng)這些資源達(dá)到一定規(guī)模,其管理的難度不可忽視。而且,資源管理的好壞,直接關(guān)系到游戲的安全和生命。
2、 網(wǎng)絡(luò)安全
安全永遠(yuǎn)是第一位的,我們無法指望所有的玩家及其所持的客戶端永遠(yuǎn)是友好的。事實上,威脅到游戲的公平性和安全性的大多數(shù)問題,歸根結(jié)底,都是由于網(wǎng)絡(luò)通信中存在的欺騙和攻擊造成的,這些問題包含但不限于交易欺騙、物品復(fù)制。
3、 邏輯安全
邏輯安全按理說應(yīng)該是游戲中最基本的考慮,覆蓋的范圍也最廣最雜。隨機數(shù)系統(tǒng)是一個非常值得重視的問題,隨機數(shù)不僅僅用于玩家可見的一些任務(wù)系統(tǒng)、戰(zhàn)斗公式、人工智能、物品得失等,還可用于網(wǎng)絡(luò)報文加密等。因此,隨機數(shù)系統(tǒng)本身的安全不容忽視。另外一個常見的邏輯安全是玩家的移動,最主要的就是防止加速齒輪這樣的變態(tài)操作。
4、 負(fù)載均衡
MMORPG 中的負(fù)載均衡包括客戶端及服務(wù)器資源管理和邏輯處理的負(fù)載均衡,其中最難預(yù)知的是網(wǎng)絡(luò)通信的負(fù)載均衡,正常情況下的網(wǎng)絡(luò)通信數(shù)量是可以在游戲設(shè)計時做出評估的,但因惡意攻擊造成的網(wǎng)絡(luò)負(fù)載是無法預(yù)測的。因此,負(fù)載均衡所要處理的主要是實時動態(tài)負(fù)載均衡和災(zāi)難恢復(fù)。負(fù)載均衡需要解決的問題包括負(fù)載監(jiān)控、負(fù)載分析、負(fù)載分發(fā)和災(zāi)難恢復(fù)。
5、 錄像系統(tǒng)
錄像系統(tǒng)的構(gòu)建,主要用于重現(xiàn)關(guān)鍵數(shù)據(jù)的輸入輸出,如玩家交易、玩家充值,或者當(dāng) bug 出現(xiàn)后,為邏輯服務(wù)器(泛指上文提到的所有類型服務(wù)器,主要是節(jié)點服務(wù)器)相應(yīng)部分啟動錄像系統(tǒng)。待收集到足夠數(shù)據(jù)后,通過錄像系統(tǒng)重現(xiàn) bug 。為了使邏輯服務(wù)器不受自身時間(如中斷調(diào)試等)的影響,還可以專門設(shè)計心跳服務(wù)器來控制數(shù)據(jù)傳輸。
四、總結(jié)
在 MMORPG 中,真正的 bug 永遠(yuǎn)存在于將來。從這一點出發(fā),關(guān)于 MMORPG 中游戲世界的構(gòu)建,怎樣苛刻的思考都不為過。
參考資料:
1、 [美] Kim Pallister編, 孟憲武 等譯. 游戲編程精粹5, P467-474, P516. 人民郵電出版社, 2007年9月. 北京.
2、 [美] Thor Alexander編, 史曉明 譯. 大型多人在線游戲開發(fā), P174-185. 人民郵電出版社, 2006年12月. 北京.
3、 [美] Dante Treglia編, 張磊 譯. 游戲編程精粹3, P117-122. 人民郵電出版社, 2003年7月. 北京.
4、 [美] Mark DeLoura編, 王淑禮 等譯. 游戲編程精粹1, P90-93. 人民郵電出版社, 2004年10月. 北京.
5、 [美] Douglas 等著, 於春景 譯. C++網(wǎng)絡(luò)編程 卷1. 中國電力出版社, 2004年11月. 北京.
6、 [美] Stephen D. Huston 等著, 馬維達(dá) 譯. ACE程序員指南. 中國電力出版社, 2004年11月. 北京.
7、 [美] Erich Gamma等著, 李英軍 等譯. 設(shè)計模式. 機械工業(yè)出版社, 2000年6月. 北京.
8、 游戲引擎全剖析. http://bbs.gameres.com/showthread.asp?threadid=101293.
9、 服務(wù)器結(jié)構(gòu)探討:登錄服的負(fù)載均衡. http://gamedev.csdn.net/page/351491d0-05ad-48a4-85e1-77870bc1eef3.
10、服務(wù)器結(jié)構(gòu)探討:最終的結(jié)構(gòu). http://gamedev.csdn.net/page/28695655-974c-4291-8ac4-2589c4e770d3.
posted on 2009-01-02 03:39
小王 閱讀(595)
評論(0) 編輯 收藏 引用 所屬分類:
游戲服務(wù)器端開發(fā)