青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011


專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
------------------------------------
Openresty 官方模塊
Openresty 標(biāo)準(zhǔn)模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺尊重!!如為您帶來不便,請(qǐng)于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊(cè)

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 219730
  • 排名 - 117

最新評(píng)論

閱讀排行榜

http://blog.chinaunix.net/uid-429659-id-3396370.html

新一代MMO架構(gòu)

 

原文件Pdf下載: Next_Generation_MMO_Architecture.zip   

官網(wǎng)下載:http://www.next-gen.cc/index.php?option=com_content&view=article&id=2&Itemid=3

nextgen架構(gòu)官網(wǎng):http://www.next-gen.cc

 

 

 

                                               翻譯:趙月明

 

摘要

 

本文闡述了一種MMO架構(gòu)的實(shí)現(xiàn),架構(gòu)充分利用了微線程和多核處理器,使服務(wù)器能夠承載更多的玩家。本方案使用erlang實(shí)現(xiàn)服務(wù)器集群,并將游戲世界實(shí)現(xiàn)分區(qū)。

 

I 介紹

MMOG(大型多人在線游戲)讓數(shù)千計(jì)甚至數(shù)以百萬計(jì)的人玩同一個(gè)游戲。新一代MMO 將提供一個(gè)高動(dòng)態(tài)的游戲設(shè)計(jì)。讓游戲設(shè)計(jì)者的設(shè)計(jì)充分自由將提升了技術(shù)門檻。

Achterbosch,皮爾斯,西蒙斯(2008),對(duì)下一代MMO期望是什么這兒?jiǎn)栴}調(diào)查了122人。

 

當(dāng)問及到什么樣的特性是令人滿意的,受訪者提出了一些想法:

    作為6.2.1指出的,寧愿玩家影響世界,許多受訪者轉(zhuǎn)而提議:

世界靠其自身的自然環(huán)境事件發(fā)生改變。這些例子包括毀滅森林的火災(zāi),淹沒陸地的洪水,生長(zhǎng)的植被,衰減的人類建筑和道路等等。這要?jiǎng)?chuàng)造一個(gè)身臨其境的世界,只是增加了晝夜循環(huán)和過去天氣的改變。燃燒的森林可能最終再生,洪水可能平息,還有npc(非游戲角色)可能維護(hù)衰退的地區(qū),以至于世界沒有發(fā)生戲劇性的改變。

 

    另一個(gè)有趣但視為不可行的建議:許多受訪者相信他們的角色應(yīng)該能夠產(chǎn)生影響,在游戲世界中,會(huì)永遠(yuǎn)完全的改變它。一個(gè)任務(wù)中的部分生物和NPC,每一個(gè)玩家完成任務(wù)之后都要重置,以便下一個(gè)玩家完成同樣的任務(wù)。這通常被稱為重生。

 

當(dāng)一個(gè)被殺的怪在世界里完全健康的重置,被稱為重生。一個(gè)參與調(diào)查者提出:開發(fā)者永遠(yuǎn)改變世界,使怪或者任務(wù)不能重生。

 

問題是:早晚沒有任務(wù)留下,沒有怪獸留下去被殺死。因?yàn)橥婕乙呀?jīng)完成任務(wù),并殺死了所有的怪獸。開發(fā)者必須趕在玩家完成之前,快速的創(chuàng)造出新的任務(wù)。 這是不可能的。

 

    游戲開發(fā)者不斷地創(chuàng)造新的內(nèi)容視乎是不可行的,但是動(dòng)態(tài)設(shè)計(jì)游戲能夠自動(dòng)的搜索適當(dāng)?shù)臅r(shí)機(jī)建立任務(wù)。

 

動(dòng)態(tài)NPC也是一項(xiàng)受訪者期望并有技術(shù)挑戰(zhàn)的特色。受訪者表示,NPC過于靜態(tài),因此在提升游戲真實(shí)體驗(yàn)方面,NPC應(yīng)該進(jìn)行一些日常的活動(dòng)。如同在單人游戲里一樣被遺忘。

 

大多數(shù)情況下,友好的NPC晝夜閑站著等待玩家與他們溝通,在這種情況下他們只有一個(gè)目的,快速執(zhí)行簡(jiǎn)單的一句話,商店購(gòu)物,或者給玩家一個(gè)任務(wù)。敵人的NPC趨向于站著等死。

一個(gè)受訪者建議,NPC可以被雇傭,做一些搜集資源保護(hù)建筑物的任務(wù)。

據(jù)一些受訪者所說,NPC除了站立還會(huì)有一個(gè)目的用途。

另一個(gè)受訪者建議:玩家應(yīng)該有NPC敵人的選擇權(quán),用很小的時(shí)間間隔來增大預(yù)測(cè)難度。就像龍與地下城中的地下城主的情況。

下一代的MMO特性要求架構(gòu)先進(jìn), 允許動(dòng)態(tài)游戲設(shè)計(jì)、分發(fā)和縮放。在大多數(shù)編程語言中,這是一個(gè)難以處理的任務(wù)。要開發(fā)滿足這些需求的服務(wù),需要新工具和編程語言提供更好的支持。

如果這一需求能夠?qū)崿F(xiàn),玩家會(huì)有豐富的體驗(yàn),讓他們感覺到在自己的影響下,世界發(fā)生持續(xù)改變。

 

II 背景

基本上有兩種不同類型的MMOG架構(gòu):服務(wù)器-客戶端模式和點(diǎn)對(duì)點(diǎn)。

A客戶/服務(wù)器結(jié)構(gòu)

通過(Cai, Xavier, Turner, and Lee, 2002) (Gil, Tavares, and Roque, 2005)的討論,集中服務(wù)器-客戶端實(shí)現(xiàn)是現(xiàn)在最普遍的MMO’S架構(gòu)方案。每個(gè)玩家通過客戶端連接游戲服務(wù)。服務(wù)器可以驗(yàn)證客戶端發(fā)送的所有信息和防作弊。,讓服務(wù)器處理所有的事件,可以非常容易的保持世界的一致性狀態(tài)。

 

問題是在于,當(dāng)玩家連接足夠多時(shí),服務(wù)器將耗盡硬件資源,然后拒絕更多的連接。解決這個(gè)問題最常見的方案是:分區(qū),游戲復(fù)制到許多分區(qū)服務(wù)器上,這些服務(wù)器上存儲(chǔ)了數(shù)以千計(jì)的玩家,并維持他們?cè)谑澜缰械臓顟B(tài)。

 

負(fù)面效應(yīng)是,玩家基地被孤立的分布在這些服務(wù)器上。意味著如果兩個(gè)朋友想在一起玩,他們必須在同一臺(tái)服務(wù)器上。另一個(gè)問題是平衡人口,如果服務(wù)器有很多玩家,人們不得不等待一個(gè)長(zhǎng)隊(duì)來登錄。如果一個(gè)服務(wù)器玩家很少,人們可能很難有機(jī)會(huì)和其他玩家一起玩,這樣就降低了游戲的玩法。

 

B 點(diǎn)對(duì)點(diǎn)架構(gòu)

分散的點(diǎn)對(duì)點(diǎn)實(shí)現(xiàn)是通過by (Hampel, Bopp, and Hinn, 2007)

(el Rhalibi and Merabti, 2005)提出的,他讓每個(gè)客戶端成為一個(gè)地理有限區(qū)域的服務(wù)器。這避免了使用集中服務(wù)的伸縮性問題,但很大程度上提升了作弊的風(fēng)險(xiǎn),增大了所有玩家狀態(tài)連貫性維護(hù)的復(fù)雜性。

 

C  Erlang

Erlang 是一個(gè)內(nèi)置并發(fā)性的語言,erlang為每一個(gè)對(duì)象或任務(wù)創(chuàng)建一個(gè)輕型進(jìn)程,代替一個(gè)連續(xù)運(yùn)行的主循環(huán).每個(gè)進(jìn)程都有其自己的主循環(huán)。依賴于硬件,一個(gè)普通的桌面計(jì)算機(jī)可以建立數(shù)以萬計(jì)的進(jìn)程。Erlang附帶了一個(gè)稱為OTP(開放通信平臺(tái))的平臺(tái)。為構(gòu)建服務(wù),OTP提供了通用的設(shè)計(jì)模式:狀態(tài)機(jī)、容錯(cuò)系統(tǒng)、實(shí)行熱代碼升級(jí)。Erlang也有自己的分布式數(shù)據(jù)庫(kù)系統(tǒng)Mneisa.如果架構(gòu)用c++或者java實(shí)現(xiàn),這些特色必須從頭開發(fā)或者

借助于第三方庫(kù)。 erlang 代碼被組織在被稱為模塊的文件里,模塊里是被寫好的函數(shù)。據(jù)(Nystr?m, 2004)說,選擇erlang為實(shí)現(xiàn)語言,通過使用其輕量級(jí)的進(jìn)程就能使服務(wù)器的性能得到顯著提升。

 

D 理論研究

在近期流行的這些游戲中,有許多對(duì)提升MMO的研究。與本架構(gòu)最相關(guān)的是對(duì)世界分區(qū)的研究。此研究就是在本章節(jié)中對(duì)討論和批評(píng)。

有兩個(gè)商業(yè)項(xiàng)目Eve Online (CCP) Second Life (Linden Lab)使用了將世界分成子區(qū)域的技術(shù)。

研究論文如(Chen, Wu, Knutsson, Lu, and Amza, 2005), (Yamamoto, Murat, Yasumoto, and Ito, 2005) (Bossche, Verdickt, and Vleeschauwer, 2006)提到以允許架構(gòu)平衡的方式將游戲劃分成一些子區(qū)域。當(dāng)一個(gè)子區(qū)域變得有負(fù)載的時(shí)候,建議移植到新的服務(wù)器。使用這樣一個(gè)伸縮性的限制,一個(gè)子地區(qū)的玩家數(shù)量不可能超過計(jì)算機(jī)負(fù)載人數(shù)上限。By assigning the computers to sub areas instead removes this limitation. (聯(lián)系上下文,沒翻譯出來)所需要的是子區(qū)域狀態(tài)必須分布在指定的計(jì)算機(jī)上。

 

E 商業(yè)項(xiàng)目

 

EvE在線是一個(gè)發(fā)生在太空的游戲。架構(gòu)將世界劃分為若干子地區(qū)(星系)。集群包括刀片服務(wù)器,也稱為節(jié)點(diǎn)。每個(gè)星系駐留在一個(gè)節(jié)點(diǎn)上。若干星系可以共享一個(gè)節(jié)點(diǎn)。玩家在節(jié)點(diǎn)間無縫轉(zhuǎn)移。當(dāng)一個(gè)玩家“跳”到另一個(gè)恒星系統(tǒng),一個(gè)加載屏幕出現(xiàn)而轉(zhuǎn)移發(fā)生。

據(jù)稱,約60名玩家一起參加戰(zhàn)斗足以搞垮一個(gè)節(jié)點(diǎn)。如果節(jié)點(diǎn)移動(dòng)到一臺(tái)專業(yè)的服務(wù)器上,大約能夠負(fù)載大約1000次戰(zhàn)斗或者交換玩家。利用機(jī)器所有的CPU內(nèi)核資源是一個(gè)令開發(fā)者感到棘手問題。在集群中,有大約五成的內(nèi)核處于閑置狀態(tài)。?insertref? EvE 服務(wù)器實(shí)現(xiàn)所用的命令式設(shè)計(jì)語言 python的東西。 Python開發(fā)人員稱之為“全局解釋器鎖”。在其內(nèi)部主要部分沒有重新設(shè)計(jì)的情況下,他有效的阻止Python使用多核。

 

第二人生(游戲名稱)也有類似的地區(qū)服務(wù)器架構(gòu)。當(dāng)無縫轉(zhuǎn)移玩家時(shí),他們穿過了世界。沒有前端集群服務(wù)器為客戶端進(jìn)行通訊。客戶端保持四個(gè)連接,連接最近的四個(gè)地區(qū)服務(wù)器。

地區(qū)服務(wù)器將所有數(shù)據(jù)流實(shí)時(shí)傳給玩家,沒有內(nèi)容保存硬盤,這樣使客戶端會(huì)很小。

 

III  推薦建構(gòu)

 

如圖1所示:架構(gòu)由四個(gè)類型的服務(wù)器通過一個(gè)計(jì)算機(jī)集群組成。服務(wù)器由:鏈接服務(wù)器,賬戶服務(wù)器,角色服務(wù)器,區(qū)域服務(wù)器。這些服務(wù)器運(yùn)行在一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)(局域網(wǎng))的不同服的計(jì)算機(jī)上。然而這不是必需的,所有的服務(wù)器也可以配置部署在同一臺(tái)計(jì)算機(jī)上。服務(wù)器軟件用Erlang實(shí)施,因?yàn)樗哂胁l(fā)、容錯(cuò)和分布式特性。客戶端通過互聯(lián)網(wǎng)鏈接到鏈接服務(wù)器鏈接服務(wù)器操縱客戶端和其他服務(wù)器之間的通訊。該帳戶服務(wù)器包含用于驗(yàn)證登錄的賬戶信息。所有的玩家角色存儲(chǔ)在角色服務(wù)器上,角色是玩家在游戲中的替身或者實(shí)體。地區(qū)服務(wù)器應(yīng)該運(yùn)行的像一個(gè)地理網(wǎng)格連接地區(qū)。如圖2所示, 他們?cè)谝黄穑且粋€(gè)玩家相互作用的世界。每個(gè)服務(wù)器運(yùn)行在一個(gè)由名稱、@和主機(jī)名稱組成的節(jié)點(diǎn)上。例如:完整的節(jié)點(diǎn)名稱是start_area@myserver。 start_area是節(jié)點(diǎn)名,myserver是主機(jī)名。節(jié)點(diǎn)名作用于運(yùn)行在不同計(jì)算機(jī)上的服務(wù)器之間的通訊。

 

 

A 客戶端

 

客戶端是運(yùn)行在玩家計(jì)算機(jī)上的程序。通過互聯(lián)網(wǎng)與鏈接服務(wù)器建立鏈接。客戶端是系統(tǒng)中非常重要的部分,但不屬于架構(gòu)的內(nèi)容。只要是能夠建立TCP鏈接,能夠與服務(wù)器發(fā)送和接受數(shù)據(jù)的語言就能實(shí)現(xiàn)。客戶端的目的是通過圖像或者文本接口為玩家展示世界。

B 鏈接服務(wù)器

 

    鏈接服務(wù)器等待客戶端的鏈接,服務(wù)于集群的前端。客戶端從不會(huì)直接與其他服務(wù)器直接通訊,所有與客戶端的通訊必須通過鏈接服務(wù)器。為每個(gè)客戶端創(chuàng)建一個(gè)鏈接進(jìn)程。鏈接進(jìn)程是一個(gè)在四種狀態(tài)間變化的簡(jiǎn)單有限狀態(tài)機(jī)。

*鏈接狀態(tài):客戶端已經(jīng)建立一個(gè)鏈接,但是沒有發(fā)送任何進(jìn)一步的指令請(qǐng)求。

*大廳狀態(tài):客戶端已經(jīng)登錄賬號(hào),瀏覽或者在游戲中建立了實(shí)體。

*玩:客戶端已經(jīng)用一個(gè)實(shí)體聯(lián)機(jī),目前正在游戲中玩。

*鏈接丟失狀態(tài):客戶端已經(jīng)失去鏈接。鏈接服務(wù)器保持玩家有效,給他一個(gè)再次登錄的機(jī)會(huì)繼續(xù)玩游戲。當(dāng)斷開時(shí)間超時(shí),鏈接服務(wù)器斷開session并終止。

 

賬戶服務(wù)器

 

如圖3所示:賬戶服務(wù)器在一個(gè)Mneisa數(shù)據(jù)庫(kù)中存儲(chǔ)了所有的用戶賬號(hào)信息。如圖3所示:賬戶服務(wù)器在一個(gè)Mneisa數(shù)據(jù)庫(kù)中存儲(chǔ)了所有的用戶賬號(hào)信息。通過賬號(hào)和密碼驗(yàn)證玩家的合法性。

 

 

 D  角色服務(wù)器

 

        如圖4所示:角色服務(wù)器存儲(chǔ)了所有的角色數(shù)據(jù)。每個(gè)賬戶能創(chuàng)建能夠登陸游戲世界的新角色。服務(wù)器提供了保存和創(chuàng)建新角色的功能。

 

 

 

E 地區(qū)服務(wù)器

 

地區(qū)服務(wù)器是集群中最復(fù)雜的服務(wù)器。他管理一個(gè)世界中的一個(gè)地區(qū)。為在地區(qū)服務(wù)器加載完成的每一個(gè)角色或?qū)ο螅瑒?chuàng)建一個(gè)保存其狀態(tài)的進(jìn)程。圖5闡述此過程。在游戲世界里,每個(gè)進(jìn)程有一個(gè)通過erlang生成的自定義id和一個(gè)作為唯一標(biāo)示id。唯一標(biāo)示id和進(jìn)程id存儲(chǔ)在一個(gè)用來查詢對(duì)象的數(shù)據(jù)庫(kù)中。

 

F 動(dòng)態(tài)特性

 

如圖6所示,地區(qū)服務(wù)器有一個(gè)模塊化的構(gòu)建。它核心是僅僅提供了一個(gè)簡(jiǎn)單事件注冊(cè)和啟動(dòng)與選擇函數(shù)庫(kù)的能力。這些庫(kù)依次為地區(qū)服務(wù)器提供所有的功能。這些函數(shù)庫(kù)在運(yùn)行時(shí),可以編譯、重新編譯、啟動(dòng)和停止。他們?yōu)殚_發(fā)和測(cè)試提供了新類庫(kù),例如一個(gè)戰(zhàn)斗系統(tǒng)無需重新啟動(dòng)服務(wù)器。

 

架構(gòu)提供了三個(gè)默認(rèn)庫(kù):

 

* libstd:這個(gè)庫(kù)提供了基本的功能,如注冊(cè)/檢索對(duì)象、對(duì)象記錄和熱代碼升級(jí)。

* libchar:這個(gè)庫(kù)允許角色在地區(qū)服務(wù)器登錄。

*libdist: 這個(gè)庫(kù)允許一個(gè)地區(qū)服務(wù)在集群中跨多個(gè)計(jì)算機(jī)分發(fā)。

 

注意不是直接啟動(dòng)庫(kù),而是啟動(dòng)他們的監(jiān)督者。依次啟動(dòng)庫(kù)以及庫(kù)運(yùn)行所需要的其他任何進(jìn)程。這樣,模塊libstd_sup提供了一個(gè)開始函數(shù)代替libstd。在erlang中,監(jiān)督者是一個(gè)監(jiān)督其他進(jìn)程的的進(jìn)程,如果一個(gè)進(jìn)程崩潰,監(jiān)督者進(jìn)程會(huì)重啟它。下面是一個(gè)命令啟動(dòng)一個(gè)庫(kù)展示:

 

  1. lib_sup:start(libstd_sup).

  2. =PROGRESS REPORT==== 7-Jul-2009::12:34:09

  3. supervisor: {local,libstd_sup}

  4. started: [{pid,<0.270.0>},

  5. {name,’LibStd’},

  6. {mfa,{libstd,start_link,[std_funs]}},

  7. {restart_type,permanent},

  8. {shutdown,2000},

  9. {child_type,worker}]

  10. =PROGRESS REPORT==== 7-Jul-2009::12:34:09

  11. supervisor: {local,libstd_sup}

  12. started: [{pid,<0.271.0>},

  13. {name,’ObjectSupervisor’},

  14. {mfa,{obj_sup,start_link,[]}},

  15. {restart_type,permanent},

  16. {shutdown,2000},

  17. {child_type,supervisor}]

  18. =PROGRESS REPORT==== 7-Jul-2009::12:34:09

  19. supervisor: {local,lib_sup}

  20. started: [{pid,<0.269.0>},

  21. {name,libstd_sup},

  22. {mfa,{libstd_sup,start_link,[]}},

  23. {restart_type,transient},

  24. {shutdown,infinity},

  25. {child_type,supervisor}]

  26. {ok,<0.269.0>}


用下面的命令關(guān)閉一個(gè)庫(kù):

 

 

  1. lib_sup:stop(libstd_sup).

  2. Ok


另一個(gè)動(dòng)態(tài)特性被稱為熱代碼交換。這使得Erlang在運(yùn)行的同時(shí)升級(jí)代碼。為此,一個(gè)名為upgrade的函數(shù)被添加到類庫(kù)libstd。接下來一個(gè)例子,對(duì)模塊libchar做了修改之后,新的代碼成功編譯,通過以下命令完成升級(jí):

  1. libstd:upgrade(libchar).

  2. {module, libchar}


Erlang允許兩個(gè)版本的代碼同時(shí)運(yùn)行。當(dāng)升級(jí)函數(shù)被調(diào)用的模塊作為參數(shù)時(shí),erlang讓當(dāng)前運(yùn)行的代碼為舊的,讓已升級(jí)的作為現(xiàn)在的。升級(jí)之后,當(dāng)前代碼(新)被使用,原來執(zhí)行舊代碼的所有進(jìn)程,在下個(gè)函數(shù)調(diào)用時(shí)將被升級(jí)。

 

G 分布

 

數(shù)臺(tái)電腦可以管理同一個(gè)地區(qū)服務(wù)器。如圖7中,兩臺(tái)分別名為server1server2的計(jì)算機(jī)運(yùn)行各自名為start_area節(jié)點(diǎn)。運(yùn)行下面的命令,從節(jié)點(diǎn)start_area@server2將關(guān)聯(lián)位于start_area@server1的分布式對(duì)象記錄。

  1. libstd:join(start_area@server1).

  2. {ok, [start_area@server1]}


 

分布式對(duì)象記錄是一個(gè)Mnesia數(shù)據(jù)庫(kù),存儲(chǔ)的信息和本地對(duì)象記錄一樣,不同之處是分布式對(duì)象記錄不只是包含本地進(jìn)程,還有所有地區(qū)服務(wù)器中的管理同一個(gè)地區(qū)的所有進(jìn)程。(不知道翻譯的對(duì)不對(duì))

如果start_area@server2往分布式對(duì)象記錄中寫數(shù)據(jù),erlang也同樣將修改同步到start_area@server1。erlang進(jìn)程id在本地是透明的,這就意味著如果進(jìn)程運(yùn)行在同一個(gè)本地機(jī)器或者同一個(gè)網(wǎng)絡(luò)中的另一臺(tái)計(jì)算機(jī),他們的通訊是沒有問題的。分布式注冊(cè)對(duì)象表將start_area@server1start_area@server2鏈接在一起,這就使他們?nèi)缤谕粋€(gè)地區(qū)服務(wù)器上操作一樣。

 

G1  負(fù)載均衡

 

libdist庫(kù)提供動(dòng)態(tài)負(fù)載分布的特征

當(dāng)管理同一片區(qū)域的所有服務(wù)器開啟時(shí)更新分布式Mnsia表。分布式庫(kù)通過檢查本地區(qū)域節(jié)點(diǎn)負(fù)載 表中的最少負(fù)載的節(jié)點(diǎn)進(jìn)行對(duì)比。如果負(fù)載差值等于或大于1時(shí),則節(jié)點(diǎn)開始將一半的進(jìn)程移動(dòng)到負(fù)載最小的地區(qū)服務(wù)器上去。

 G.2 遷移

 

分布式的增加,在系統(tǒng)運(yùn)行時(shí),使客戶端沒有任何察覺的情況下,角色在從一臺(tái)服務(wù)器遷徙到另一臺(tái)服務(wù)器成為可能。下面解釋如何遷移:

 

如圖8所示,一個(gè)對(duì)象接收到一個(gè)將要遷徙到另外一個(gè)節(jié)點(diǎn)的消息。這個(gè)消息通常是由分布式庫(kù) libdist 發(fā)送,但也可以通過以下命令從節(jié)點(diǎn)手動(dòng)發(fā)送。

 

  1. ProcessId ! {migrate, start_area@server1}.


如圖9所示:在遷徙目標(biāo)節(jié)點(diǎn),當(dāng)收到一個(gè)遷徙消息時(shí),當(dāng)前對(duì)象進(jìn)程開始一個(gè)帶有相等id和狀態(tài)的新進(jìn)程。新進(jìn)程id被返回到位于start_area@server2上舊的進(jìn)程。當(dāng)一個(gè)新進(jìn)程被創(chuàng)建,他覆蓋了當(dāng)前在全局注冊(cè)表中擁有自己進(jìn)程id的數(shù)據(jù)條目,因此所有的消息應(yīng)該發(fā)給他自己。

 

10所描述,這時(shí),即使所有消息仍然發(fā)送給舊的進(jìn)程,舊的進(jìn)程會(huì)轉(zhuǎn)發(fā)給新的進(jìn)程。

11所示, 如果舊進(jìn)程一秒鐘之內(nèi)無法接受新的消息,將殺死自己,我們認(rèn)為遷移是成功的。

IV 效果

 

用于測(cè)試的服務(wù)器處理器Phenom(tm) II X4 9408G內(nèi)存。地區(qū)的大小為10000公尺,在一個(gè)625公尺的四邊形中,四叉樹將世界拆分成256個(gè)四邊形。在測(cè)試中,地區(qū)里生成了一些機(jī)器人對(duì)象。機(jī)器人大約每7.5秒(5+5秒內(nèi)隨即)前后移動(dòng)改變方向。

每個(gè)動(dòng)作更新都要發(fā)送給在同一區(qū)塊中的其他機(jī)器人對(duì)象,這就意味著與系統(tǒng)中機(jī)器人數(shù)量相比,消息數(shù)量是呈指數(shù)增長(zhǎng)的。

 

A  CPU負(fù)載

 

12展示了在系統(tǒng)中機(jī)器人增長(zhǎng)同時(shí)所有CPU核心的負(fù)載情況。CPU負(fù)載呈指數(shù)增長(zhǎng),當(dāng)24000個(gè)并發(fā)機(jī)器人運(yùn)行時(shí),所有的核心負(fù)載都接近了100%

當(dāng)機(jī)器人達(dá)到24000時(shí),在一個(gè)四邊形區(qū)塊中每秒鐘處理1178個(gè)消息,在整個(gè)地區(qū)服務(wù)器中,每秒鐘處理了301568個(gè)消息。

B 內(nèi)存負(fù)載

 

在圖13中顯示的是鏈接服務(wù)器,角色服務(wù)器、賬戶服務(wù)器和地區(qū)服務(wù)器的內(nèi)存負(fù)載情況。

當(dāng)24000個(gè)并發(fā)機(jī)器人運(yùn)行時(shí),地區(qū)服務(wù)器使用內(nèi)存619M的時(shí)候。其他服務(wù)器內(nèi)存負(fù)載基本保持不變,仍然在40-43M之間。

 

 

C 視覺效果

 

當(dāng)一個(gè)客戶端登陸,大約60-80個(gè)機(jī)器人被做了統(tǒng)計(jì)。視覺定時(shí)被用來檢查所有明顯視覺延遲。根據(jù)不同的負(fù)載水平,隨即挑選一些機(jī)器人,他們的運(yùn)動(dòng)變化在iphone上面同步。6000機(jī)器人在地區(qū)服務(wù)器上時(shí),平均運(yùn)動(dòng)變化時(shí)間是7.1秒。(我應(yīng)該估量一下1200024000個(gè)機(jī)器人時(shí)的情況,但在機(jī)器人中做了一個(gè)日志功能來代替手動(dòng)計(jì)時(shí)。)

 

V討論

 

    測(cè)試數(shù)以千計(jì)的客戶端在現(xiàn)實(shí)的環(huán)境是一個(gè)問題,因?yàn)楹茈y獲得如此數(shù)量的計(jì)算機(jī)。從同一臺(tái)計(jì)算機(jī)上運(yùn)行數(shù)以千計(jì)的客戶端可能會(huì)造成瓶頸,不是每個(gè)客戶端都有他們自己的計(jì)算機(jī)。所有的測(cè)試計(jì)算機(jī)都通過同一個(gè)局域網(wǎng)內(nèi)連接,真實(shí)的生產(chǎn)環(huán)境或許不會(huì)是這樣的。當(dāng)從世界各地通過互聯(lián)網(wǎng)連接時(shí),響應(yīng)時(shí)間可能會(huì)增加。(我還未測(cè)試這些)。在這種情況下,服務(wù)器集群的地理位置也會(huì)影響到客戶端的響應(yīng)時(shí)間。

 

當(dāng)游戲的特性數(shù)據(jù)向進(jìn)程狀態(tài)增加時(shí),地區(qū)服務(wù)器的內(nèi)存消耗可能會(huì)增加。在測(cè)試時(shí),地區(qū)服務(wù)器的進(jìn)程中有一個(gè)極小的狀態(tài),可以充分的管理角色登陸和遷徙過程。

在沒有檢查探測(cè)已經(jīng)登陸的賬戶或者角色,又或者角色是否屬于賬號(hào)的登陸之前,賬號(hào)和角色登陸序列是不安全的。(感覺沒翻譯清楚。)

將世界劃分在地區(qū)服務(wù)器中可能并不是最好的方案。一個(gè)更好的方式是做出一個(gè)模型:對(duì)統(tǒng)一服務(wù)器做一個(gè)繼承,分支出包含區(qū)域/太陽系系統(tǒng)的銀河服務(wù)器,同樣區(qū)域/太陽系系統(tǒng)包含星球服務(wù)器,星球服務(wù)器又被劃分成區(qū)域服務(wù)器。該方法將可以使它通過自上而下的方式更加容易的分發(fā)消息。這將使星際旅行甚至從星球表面到它周圍太空的無縫運(yùn)動(dòng)變得如此簡(jiǎn)單。

 

VI     結(jié)論和未來工作

以后再翻譯。

原文件Pdf下載: Next_Generation_MMO_Architecture.zip   

nextgen架構(gòu)官網(wǎng):http://www.next-gen.cc

 

由于本人英文水平太爛,本文完全是為學(xué)習(xí)之用的業(yè)余翻譯。希望對(duì)大家有用~~  文章難免多處錯(cuò)誤,歡迎批評(píng)指正。

若轉(zhuǎn)載,請(qǐng)附上原文鏈接:http://blog.chinaunix.net/uid-429659-id-3396370.html

posted on 2016-03-28 09:01 思月行云 閱讀(560) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MMO
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品99久久久久久久vr| 99在线视频精品| 国产精品卡一卡二| 欧美国产日韩一区二区在线观看 | 亚洲激情第一页| 性欧美1819性猛交| 亚洲一卡久久| 欧美日韩成人在线观看| 久久精品人人做人人综合| 欧美成人午夜激情在线| 久久精品理论片| 欧美日韩国产不卡| 国产乱码精品| 欧美www视频| 欧美激情中文字幕在线| 亚洲视频 欧洲视频| 久久天天综合| 欧美高清视频| 国产欧美在线播放| 欧美在线欧美在线| 免费观看日韩av| 最新国产拍偷乱拍精品| 欧美综合二区| 在线日韩中文字幕| 老牛影视一区二区三区| 久久黄色小说| 亚洲七七久久综合桃花剧情介绍| 亚洲福利一区| 国产精品久久777777毛茸茸| 久久精品系列| 久久久人成影片一区二区三区| 亚洲国产日韩欧美一区二区三区| 亚洲黄网站黄| 国产精品一级| 亚洲国产精品一区在线观看不卡| 欧美日韩一二区| 久久噜噜噜精品国产亚洲综合| 欧美一级视频精品观看| 99re66热这里只有精品4| 亚洲欧美日韩成人| 亚洲高清不卡在线观看| av不卡免费看| 亚洲激情国产| 欧美一区二区三区视频| 在线精品视频一区二区三四| 99国产精品久久久| 亚洲大片精品永久免费| 午夜国产一区| 亚洲视频在线二区| 久久中文久久字幕| 欧美与欧洲交xxxx免费观看| 欧美成人三级在线| 久久这里有精品视频| 欧美性猛片xxxx免费看久爱| 欧美黄色影院| 一区二区三区在线观看欧美| 亚洲婷婷在线| a91a精品视频在线观看| 一本久道久久综合狠狠爱| 一区二区三区在线观看国产| 亚洲字幕在线观看| 久久综合九色综合欧美就去吻| 欧美资源在线观看| 国一区二区在线观看| 久久国产视频网站| 母乳一区在线观看| 91久久综合亚洲鲁鲁五月天| 免费不卡中文字幕视频| 亚洲电影观看| 一本色道久久精品| 国产精品v欧美精品v日本精品动漫 | 蜜桃伊人久久| 亚洲靠逼com| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 午夜免费日韩视频| 久久久av网站| 91久久在线播放| 欧美日韩精品一区二区天天拍小说| 亚洲精品国产品国语在线app | 亚洲色图制服丝袜| 国产精品美女一区二区在线观看| 亚洲综合色婷婷| 久久亚洲综合色一区二区三区| 亚洲国产小视频| 欧美视频精品在线| 欧美一级在线亚洲天堂| 欧美国产日韩一区二区| 宅男噜噜噜66一区二区| 国产精品中文在线| 麻豆久久久9性大片| 一区二区三区四区五区精品| 欧美一区二区三区四区夜夜大片| 在线精品视频免费观看 | 欧美一级播放| 亚洲国产视频a| 欧美一区二区三区另类| 亚洲国产精品传媒在线观看 | 久久亚洲午夜电影| 一区二区欧美日韩| 免费日韩视频| 午夜在线一区二区| 亚洲精品免费一二三区| 国产人妖伪娘一区91| 欧美精品成人一区二区在线观看 | 国产一区二区三区四区三区四| 欧美成熟视频| 久久精品理论片| 中文一区字幕| 91久久国产精品91久久性色| 欧美一区二区三区男人的天堂| 亚洲三级电影在线观看| 狠狠入ady亚洲精品| 欧美日韩在线影院| 欧美国产日韩精品免费观看| 欧美在线视频日韩| 在线一区日本视频| 欧美激情综合五月色丁香| 欧美伊久线香蕉线新在线| 亚洲人成网站在线观看播放| 久久亚洲色图| 亚洲欧美日韩区| 99国产精品| 亚洲国产日韩欧美在线动漫 | 美女精品网站| 欧美在线在线| 欧美亚洲在线播放| 亚洲一区美女视频在线观看免费| 亚洲九九精品| 亚洲国产美女久久久久| 欧美成人免费在线| 免费毛片一区二区三区久久久| 欧美有码在线观看视频| 亚洲欧美日韩综合国产aⅴ| 一本色道久久综合精品竹菊| 亚洲大片免费看| 亚洲国产激情| 亚洲黄色在线| 亚洲精品一二三区| 亚洲区国产区| 亚洲看片网站| 99国产精品视频免费观看一公开| 亚洲人永久免费| 亚洲精品国产欧美| 亚洲精品韩国| 99精品国产福利在线观看免费| 亚洲精品视频免费观看| 亚洲理论在线观看| 一区二区毛片| 亚洲综合色激情五月| 午夜精品久久久久久99热| 欧美一区二区高清在线观看| 欧美在线三级| 欧美 日韩 国产精品免费观看| 欧美成人中文字幕在线| 亚洲第一精品久久忘忧草社区| 亚洲国产成人精品女人久久久 | 亚洲制服丝袜在线| 性欧美在线看片a免费观看| 欧美一区在线视频| 免费成人美女女| 亚洲精品1区2区| 亚洲视频在线二区| 久久精品人人做人人综合| 久久影视三级福利片| 欧美精品一区二区三区一线天视频| 欧美日韩天堂| 国产日韩精品一区二区| 一区二区在线不卡| 亚洲色在线视频| 久久免费视频一区| 亚洲三级视频| 欧美综合国产精品久久丁香| 噜噜爱69成人精品| 国产精品成人一区二区三区吃奶| 国产一区二区三区观看| 亚洲美女视频网| 久久精品亚洲一区二区| 亚洲国产精品一区| 亚洲免费伊人电影在线观看av| 久久人人97超碰人人澡爱香蕉| 欧美精品首页| 影音先锋在线一区| 亚洲一区二区三区激情| 男女视频一区二区| 亚洲午夜久久久| 欧美激情精品久久久久久黑人 | 欧美1区2区视频| 国产亚洲精品aa午夜观看| 精品动漫3d一区二区三区免费| 久久久久久九九九九| 欧美香蕉大胸在线视频观看| 激情小说亚洲一区| 校园春色国产精品| 亚洲国产日韩欧美综合久久| 亚洲欧美一区二区三区久久| 欧美国产第一页| 在线电影一区| 久久精品国产2020观看福利| 亚洲精品久久| 欧美刺激性大交免费视频|