• <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>
            Creative Commons License
            本Blog采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— Fox <游戲人生>

            游戲人生

            游戲人生 != ( 人生 == 游戲 )
            站點(diǎn)遷移至:http://www.yulefox.com。請(qǐng)訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
            posts - 62, comments - 508, trackbacks - 0, articles - 7

            Author: Fox

            在MMORPG中,存在大量的數(shù)據(jù)文件和腳本文件,這些文件涉及很多變量,當(dāng)玩家信息需要存取時(shí)(上線、下線、保存、服務(wù)器交互),即伴隨著大量的讀寫(xiě)操作。隨著游戲中游戲任務(wù)的增加,每一個(gè)玩家對(duì)應(yīng)的需要數(shù)據(jù)庫(kù)存取的腳本變量的數(shù)據(jù)量也隨之線性增長(zhǎng),隨著玩家數(shù)量的增加,在服務(wù)器保存玩家角色信息的時(shí)候,通信量的大小是相當(dāng)可觀的,使用多線程讀寫(xiě),可以使服務(wù)器的處理能力大幅增強(qiáng),但網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)承受的壓力也會(huì)大幅增加。

            當(dāng)然現(xiàn)在有很多的腳本語(yǔ)言為我們?cè)O(shè)計(jì)任務(wù)系統(tǒng)提供了便利,像Lua、Python、Ruby這些動(dòng)態(tài)語(yǔ)言的功能越來(lái)越強(qiáng),而且可以肯定的是,會(huì)有越來(lái)越多的產(chǎn)品采用這些優(yōu)秀的語(yǔ)言。但我今天要談的不是如何使用動(dòng)態(tài)語(yǔ)言,也不是討論動(dòng)態(tài)語(yǔ)言孰優(yōu)孰劣的問(wèn)題,而是對(duì)于大量的腳本變量的存取優(yōu)化。說(shuō)白了,這對(duì)于使用自定義腳本語(yǔ)言的游戲開(kāi)發(fā)人員才更有參考價(jià)值。而且我要說(shuō)的問(wèn)題很小,小到我只是講一點(diǎn)點(diǎn)內(nèi)容,只是我今天下午的一點(diǎn)活,總結(jié)下來(lái)更多只是為了讓自己記住,并不是教育別人。

            假設(shè)在整個(gè)腳本系統(tǒng)中,存在500個(gè)與玩家相關(guān)而且需要數(shù)據(jù)庫(kù)存取的腳本變量,如果一個(gè)游戲世界中擁有3000個(gè)在線玩家,平均每個(gè)玩家的腳本變量大小為10KB,如果服務(wù)器同時(shí)保存這3000個(gè)玩家的數(shù)據(jù)(那可不僅僅是腳本變量,當(dāng)然腳本變量所占的分量比較大就是了),3000×10KB,哦……與此同時(shí),服務(wù)器還要進(jìn)行其實(shí)正常的網(wǎng)絡(luò)通信和邏輯處理(雖然不可能是同一個(gè)線程),但服務(wù)器承受的壓力已經(jīng)不小了吧,為了減少這種壓力,腳本變量成為了一種稀缺資源。
            為了對(duì)腳本變量的存取進(jìn)行優(yōu)化,我想到了一個(gè)最容易實(shí)現(xiàn)的方法。通過(guò)對(duì)數(shù)據(jù)庫(kù)的觀察(其實(shí)想也想也想得到:)),我發(fā)現(xiàn)玩家數(shù)據(jù)中大量的腳本變量的值都是0或者空字符串,這就為優(yōu)化提供了很大的一個(gè)空間。

            服務(wù)器一般都保存有一個(gè)腳本變量的配置文件,在這個(gè)文件中列出了所有的腳本變量及其默認(rèn)值。當(dāng)玩家登錄時(shí),服務(wù)器將為其依據(jù)這個(gè)文件為其建立一份拷貝,并從數(shù)據(jù)庫(kù)讀取這些變量的真實(shí)值填充之。因?yàn)榇罅康淖兞恐刀际悄J(rèn)值,所以在往數(shù)據(jù)庫(kù)保存的時(shí)候,是沒(méi)有必要全部保存的,而只需保存那些不同于默認(rèn)值的變量名和變量值以及該變量對(duì)應(yīng)的下標(biāo)即可。下一次從數(shù)據(jù)庫(kù)讀入的時(shí)候根據(jù)下標(biāo)確定哪些變量值需要從數(shù)據(jù)庫(kù)中讀取就可以了。

            很簡(jiǎn)單的一個(gè)操作,雖然做到了這一點(diǎn)優(yōu)化,但是對(duì)于500個(gè)變量的線性讀取和其他操作,依然不是一個(gè)好的處理方法。

            幾點(diǎn)改進(jìn)的方向,目前只是有個(gè)想法:

            1、將玩家與其腳本變量解耦

            并不是所有的玩家都需要500個(gè)腳本變量的,不同等級(jí)的玩家可以參與的任務(wù)和活動(dòng)是完全不同的,我們顯然沒(méi)有必要為每一個(gè)玩家從生到死都保持這500個(gè)變量。這樣考慮下來(lái),估計(jì)一個(gè)玩家的腳本變量數(shù)可以減少300-400個(gè),從而實(shí)現(xiàn)了“垃圾”回收再利用。OMG!

            想法是非常具有誘惑力的,但這一優(yōu)化同時(shí)涉及到腳本策劃和程序,而且稍有不慎(對(duì)某一變量重復(fù)使用),全盤(pán)皆輸,在“穩(wěn)定壓倒一切”的大方針下,這樣的優(yōu)化需要給出一個(gè)系統(tǒng)的策略,玩家等級(jí)、職業(yè)因素的影響都要考慮進(jìn)去。

            2、對(duì)玩家腳本變量實(shí)現(xiàn)壓縮存儲(chǔ)

            未經(jīng)壓縮的腳本變量,每個(gè)大概有幾十Bytes,如果采用一個(gè)好的壓縮算法,能不能減少到10Bytes呢?什么又是一個(gè)好的壓縮算法呢?壓縮解壓縮的成本和直接存取成本比起來(lái)哪個(gè)更高呢?想想這些的確也都是問(wèn)題呢。

            /*****************************************************************************
            ? 這只是我工作中的一個(gè)總結(jié),問(wèn)題很簡(jiǎn)單,也很瑣碎,正如我前面所提的,僅僅是提供一個(gè)參考。
            *****************************************************************************/

            posted @ 2007-12-17 19:55 Fox 閱讀(1547) | 評(píng)論 (5)編輯 收藏

            Author: Fox

            一個(gè)
            MMORPGMassively Multiplayer Online Role Playing Game)的架構(gòu)包含客戶端和服務(wù)器兩部分。客戶端主要涉及計(jì)算機(jī)圖形學(xué)、物理學(xué)、多媒體技術(shù)等,服務(wù)器主要涉及網(wǎng)絡(luò)通信技術(shù)、數(shù)據(jù)庫(kù)技術(shù),而人工智能、操作系統(tǒng)等計(jì)算機(jī)基礎(chǔ)學(xué)科知識(shí)的應(yīng)用體現(xiàn)在MMORPG開(kāi)發(fā)過(guò)程中的方方面面。

            一、游戲世界的劃分

            理想狀態(tài)的游戲世界僅由一個(gè)完整的場(chǎng)景組成,在《魔獸爭(zhēng)霸 III 》、《 CS 》這樣的單機(jī)游戲中,所有玩家位于該場(chǎng)景中,在理論上,位于該場(chǎng)景中的任意玩家都可以看到游戲中所有玩家并與之交互,出于公平性和游戲性(而不是技術(shù)上)的考慮,游戲中并不會(huì)這樣做。

            然而,目前的 MMORPG 中,幾乎沒(méi)有任何一款可以做到整個(gè)游戲世界只包含一個(gè)場(chǎng)景,因?yàn)樵谝豢?/span> MMORPG 中,同時(shí)在線的玩家數(shù)量成百上千,甚至是數(shù)萬(wàn)人同時(shí)在一個(gè)游戲世界中交互。以現(xiàn)在的網(wǎng)絡(luò)技術(shù)和計(jì)算機(jī)系統(tǒng),還無(wú)法為這么多玩家的交互提供即時(shí)處理。因此, MMORPG 的游戲世界被劃分為大小不等、數(shù)量眾多的場(chǎng)景,游戲服務(wù)器對(duì)于這些場(chǎng)景的處理分為分區(qū)和無(wú)縫兩種。

            在分區(qū)式服務(wù)器中,一個(gè)場(chǎng)景中的玩家無(wú)法看到另一個(gè)場(chǎng)景中的玩家,當(dāng)玩家從一個(gè)場(chǎng)景到另外一個(gè)場(chǎng)景跨越時(shí),都有一個(gè)數(shù)據(jù)轉(zhuǎn)移和加載的過(guò)程(尤其是從一個(gè)分區(qū)服務(wù)器跨越到另外一個(gè)服務(wù)器時(shí)),玩家都有一個(gè)等待的時(shí)間,在這段時(shí)間內(nèi),服務(wù)器的主要工作是實(shí)現(xiàn)跨越玩家數(shù)據(jù)的轉(zhuǎn)移和加載以及后一個(gè)場(chǎng)景中玩家、 NPC 等數(shù)據(jù)的傳輸,客戶端的主要工作是實(shí)現(xiàn)新場(chǎng)景資源的加載和服務(wù)器通信。主要時(shí)間的長(zhǎng)短主要取決于后一個(gè)場(chǎng)景中資源數(shù)據(jù)的大小。分區(qū)式服務(wù)器的優(yōu)點(diǎn)主要是各分區(qū)服務(wù)器保持相對(duì)獨(dú)立,缺點(diǎn)是游戲空間不夠大,而且,一旦某個(gè)分區(qū)服務(wù)器中止服務(wù),位于該服務(wù)器上的所有玩家將失去連接。

            所謂無(wú)縫服務(wù)器,玩家?guī)缀醪煊X(jué)不到場(chǎng)景之間的這種切換,在場(chǎng)景間沒(méi)有物理上的屏障,對(duì)于玩家而言,眾多場(chǎng)景構(gòu)成了一個(gè)巨大的游戲世界。場(chǎng)景之間,甚至服務(wù)器之間“沒(méi)有了”明確的界線。因此,無(wú)縫服務(wù)器為玩家提供了更大的游戲空間和更友好的交互,實(shí)現(xiàn)了動(dòng)態(tài)邊界的無(wú)縫服務(wù)器甚至可以在某個(gè)服務(wù)器中止服務(wù)時(shí),按一定策略將負(fù)載動(dòng)態(tài)分散到其他服務(wù)器。因此,無(wú)縫服務(wù)器在技術(shù)上要比分區(qū)服務(wù)器更加復(fù)雜。

            目前國(guó)內(nèi)上市的 MMORPG ,大多采用分區(qū)式服務(wù)器,做到無(wú)縫世界的主要有《完美世界》和《天下貳》等,國(guó)外的 MMORPG 中,像《魔獸世界》、《 EVE 》等,都實(shí)現(xiàn)了無(wú)縫世界。

            無(wú)縫服務(wù)器與分區(qū)式服務(wù)器在技術(shù)上的主要區(qū)別是,當(dāng)位于場(chǎng)景 S1 中的玩家 P1 處于兩個(gè)(甚至更多)場(chǎng)景 S1 S2 的邊界區(qū)域內(nèi)時(shí),要保證 P1 能夠看到場(chǎng)景 S2 中建筑、玩家、 NPC 等可感知對(duì)象。而且邊界區(qū)域的大小要大于等于 P1 可感知的范圍,否則就可能發(fā)生 S2 中的可感知對(duì)象突然閃現(xiàn)在 P1 視野中的異常。

            無(wú)疑,無(wú)縫世界為玩家提供了更人性化和更具魅力的用戶體驗(yàn)。

            二、無(wú)縫世界游戲服務(wù)器的整體架構(gòu)

            MMORPG 的服務(wù)器架構(gòu)從功能上主要?jiǎng)澐譃槿N:

            1、 登錄服務(wù)器( Login Server

            登錄服務(wù)器用于玩家驗(yàn)證登錄,并根據(jù)系統(tǒng)記錄玩家信息得到其所在節(jié)點(diǎn)服務(wù)器,并通過(guò)世界服務(wù)器為登錄玩家和對(duì)應(yīng)節(jié)點(diǎn)服務(wù)器建立連接。

            2、 世界服務(wù)器( World Server

            世界服務(wù)器將整個(gè)游戲世界劃分成不同場(chǎng)景,將所有場(chǎng)景按一定策略分配給節(jié)點(diǎn)服務(wù)器,并對(duì)節(jié)點(diǎn)服務(wù)器進(jìn)行管理。世界服務(wù)器的另一功能是與登錄服務(wù)器交互。因此,世界服務(wù)器是登錄服務(wù)器、節(jié)點(diǎn)服務(wù)器的溝通橋梁,當(dāng)然,一旦玩家登錄成功,世界服務(wù)器將主要處理節(jié)點(diǎn)服務(wù)器間的通信。因此,世界服務(wù)器對(duì)于玩家是透明的。

            3、 節(jié)點(diǎn)服務(wù)器( Node Server

            節(jié)點(diǎn)服務(wù)器負(fù)責(zé)管理位于該節(jié)點(diǎn)的所有玩家、 NPC 的所有交互,在無(wú)縫世界游戲中,由于邊界區(qū)域的存在,一個(gè)節(jié)點(diǎn)服務(wù)器甚至要處理相鄰節(jié)點(diǎn)上位于邊界區(qū)域的玩家和 NPC 的信息。

            在具體實(shí)現(xiàn)上,不同的 MMORPG 為了便于管理,可能還會(huì)具有 AI 服務(wù)器、日志服務(wù)器、數(shù)據(jù)庫(kù)緩存服務(wù)器、代理服務(wù)器等。

            三、 無(wú)縫世界游戲服務(wù)器的主要技術(shù)需求

            1、 編程語(yǔ)言( C/C++ SQL Lua Python

            2、 圖形庫(kù)( Direct 3D OpenGL

            3、 網(wǎng)絡(luò)通信( WinSock BSD Socket ,或者 ACE

            4、 消息、事件、多線程、 GUI

            5、 OS

            三、無(wú)縫世界游戲服務(wù)器需要解決的主要問(wèn)題

            1、 資源管理

            無(wú)論是服務(wù)器還是客戶端,都涉及到大量資源:玩家數(shù)據(jù)、 NPC 數(shù)據(jù)、戰(zhàn)斗公式、模型資源、通信資源等。當(dāng)這些資源達(dá)到一定規(guī)模,其管理的難度不可忽視。而且,資源管理的好壞,直接關(guān)系到游戲的安全和生命。

            2、 網(wǎng)絡(luò)安全

            安全永遠(yuǎn)是第一位的,我們無(wú)法指望所有的玩家及其所持的客戶端永遠(yuǎn)是友好的。事實(shí)上,威脅到游戲的公平性和安全性的大多數(shù)問(wèn)題,歸根結(jié)底,都是由于網(wǎng)絡(luò)通信中存在的欺騙和攻擊造成的,這些問(wèn)題包含但不限于交易欺騙、物品復(fù)制。

            3、 邏輯安全

            邏輯安全按理說(shuō)應(yīng)該是游戲中最基本的考慮,覆蓋的范圍也最廣最雜。隨機(jī)數(shù)系統(tǒng)是一個(gè)非常值得重視的問(wèn)題,隨機(jī)數(shù)不僅僅用于玩家可見(jiàn)的一些任務(wù)系統(tǒng)、戰(zhàn)斗公式、人工智能、物品得失等,還可用于網(wǎng)絡(luò)報(bào)文加密等。因此,隨機(jī)數(shù)系統(tǒng)本身的安全不容忽視。另外一個(gè)常見(jiàn)的邏輯安全是玩家的移動(dòng),最主要的就是防止加速齒輪這樣的變態(tài)操作。

            4、 負(fù)載均衡

            MMORPG 中的負(fù)載均衡包括客戶端及服務(wù)器資源管理和邏輯處理的負(fù)載均衡,其中最難預(yù)知的是網(wǎng)絡(luò)通信的負(fù)載均衡,正常情況下的網(wǎng)絡(luò)通信數(shù)量是可以在游戲設(shè)計(jì)時(shí)做出評(píng)估的,但因惡意攻擊造成的網(wǎng)絡(luò)負(fù)載是無(wú)法預(yù)測(cè)的。因此,負(fù)載均衡所要處理的主要是實(shí)時(shí)動(dòng)態(tài)負(fù)載均衡和災(zāi)難恢復(fù)。負(fù)載均衡需要解決的問(wèn)題包括負(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é)點(diǎn)服務(wù)器)相應(yīng)部分啟動(dòng)錄像系統(tǒng)。待收集到足夠數(shù)據(jù)后,通過(guò)錄像系統(tǒng)重現(xiàn) bug 。為了使邏輯服務(wù)器不受自身時(shí)間(如中斷調(diào)試等)的影響,還可以專門(mén)設(shè)計(jì)心跳服務(wù)器來(lái)控制數(shù)據(jù)傳輸。

            四、總結(jié)

            MMORPG 中,真正的 bug 永遠(yuǎn)存在于將來(lái)。從這一點(diǎn)出發(fā),關(guān)于 MMORPG 中游戲世界的構(gòu)建,怎樣苛刻的思考都不為過(guò)。

            參考資料:

            1、 [美] Kim Pallister編, 孟憲武 等譯. 游戲編程精粹5, P467-474, P516. 人民郵電出版社, 2007年9月. 北京.
            2、 [美] Thor Alexander編, 史曉明 譯. 大型多人在線游戲開(kāi)發(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. 中國(guó)電力出版社, 2004年11月. 北京.
            6、 [美] Stephen D. Huston 等著, 馬維達(dá) 譯. ACE程序員指南. 中國(guó)電力出版社, 2004年11月. 北京.
            7、 [美] Erich Gamma等著, 李英軍 等譯. 設(shè)計(jì)模式. 機(jī)械工業(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.
            11、談?wù)劸W(wǎng)絡(luò)游戲服務(wù)器解決方案. http://www.beareyes.com.cn/2/lib/200411/08/20041108102.htm.
            12、負(fù)載均衡——大型在線系統(tǒng)實(shí)現(xiàn)的關(guān)鍵(下篇)(服務(wù)器集群架構(gòu)的設(shè)計(jì)與選擇). http://blog.csdn.net/sodme/archive/2005/06/15/394576.aspx.
            13、云風(fēng)的BLOG. http://blog.codingnow.com/

            /*****************************************************************************
            ? 從0:00到5:00,在寫(xiě)這篇隨筆的過(guò)程中,我翻找、點(diǎn)擊著上面的這些資料,其實(shí)還有更
            ? 多的資料,沒(méi)有記在上面,算是為開(kāi)題做的準(zhǔn)備。現(xiàn)在依然是睡意全無(wú)。越寫(xiě)越覺(jué)得
            ? 不夠,越想越覺(jué)得還有更多東西寫(xiě)不出來(lái)……
            ? PS:這些資料大都不是第一次翻,以前看這些資料大多只是單純的看,現(xiàn)在有目的的
            ? 看,才覺(jué)得都寫(xiě)得很有味道。不管是不是同意所有觀點(diǎn),都不是本文討論的重點(diǎn)。
            *****************************************************************************/

            posted @ 2007-12-16 05:24 Fox 閱讀(3170) | 評(píng)論 (7)編輯 收藏

            僅列出標(biāo)題
            共7頁(yè): 1 2 3 4 5 6 7 
            久久996热精品xxxx| 久久中文字幕人妻熟av女| 少妇人妻综合久久中文字幕| 久久96国产精品久久久| 精品免费久久久久国产一区 | 日产精品久久久久久久性色| 无码人妻少妇久久中文字幕蜜桃| 久久午夜伦鲁片免费无码| 波多野结衣AV无码久久一区| 精品国产一区二区三区久久| 97久久久精品综合88久久| 青青草原综合久久大伊人导航| 亚洲中文字幕无码久久精品1| 久久久午夜精品| 国内精品久久久久久麻豆| 狠狠色丁香婷婷综合久久来来去| 久久精品无码一区二区app| 久久精品亚洲一区二区三区浴池| 久久无码国产| 国产成人综合久久久久久| 国产亚洲精品久久久久秋霞| 无码日韩人妻精品久久蜜桃| 91精品国产色综合久久| 狠狠色丁香婷婷综合久久来来去 | 伊人久久国产免费观看视频| 精品人妻久久久久久888| 三级韩国一区久久二区综合| 久久人人爽人人爽人人片av麻烦 | 婷婷伊人久久大香线蕉AV| 久久婷婷五月综合色高清| 99久久99久久精品国产| 99久久精品国产高清一区二区| 国产精品99久久精品爆乳| 久久天天躁夜夜躁狠狠| 久久精品一区二区国产| 色欲综合久久躁天天躁| 久久久无码人妻精品无码| 国产亚洲成人久久| 久久精品国产精品亚洲毛片| 亚洲国产视频久久| 大蕉久久伊人中文字幕|