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

            游戲人生

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

            游戲腳本變量存取優(yōu)化

            Posted on 2007-12-17 19:55 Fox 閱讀(1547) 評論(5)  編輯 收藏 引用 所屬分類: G游戲編程

            Author: Fox

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

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

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

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

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

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

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

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

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

            2、對玩家腳本變量實現(xiàn)壓縮存儲

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

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

            Feedback

            # re: 游戲腳本變量存取優(yōu)化  回復(fù)  更多評論   

            2007-12-18 09:38 by 金慶
            最多總共也只有30M,有必要優(yōu)化嗎?數(shù)據(jù)庫性能應(yīng)該不至于那么低吧?干脆不要存數(shù)據(jù)庫了,每個用戶一個保存文件就行了,別說30M,30G都沒問題。

            # re: 游戲腳本變量存取優(yōu)化  回復(fù)  更多評論   

            2007-12-18 09:46 by Fox
            把30M放到網(wǎng)絡(luò)上跑呢?以現(xiàn)在的網(wǎng)絡(luò)質(zhì)量只怕還做不到,而且邏輯服務(wù)器和數(shù)據(jù)庫服務(wù)器往往不在一臺主機上,你所說的方法還是不太可行……

            # re: 游戲腳本變量存取優(yōu)化  回復(fù)  更多評論   

            2007-12-20 13:50 by 秦歌
            能壓縮嗎

            # re: 游戲腳本變量存取優(yōu)化  回復(fù)  更多評論   

            2007-12-20 14:14 by Fox
            其實,網(wǎng)絡(luò)消息在傳輸過程中,大多都是經(jīng)過壓縮的,因此基本沒有再次壓縮的必要和空間里:)

            # re: 游戲腳本變量存取優(yōu)化  回復(fù)  更多評論   

            2007-12-21 17:52 by Xerxes
            將玩家與其腳本變量解耦 確實是個好想法,有時間研究下...
            久久精品99久久香蕉国产色戒 | 久久久青草青青亚洲国产免观 | 国内精品久久久久久麻豆| 色综合久久天天综合| 久久国产成人午夜aⅴ影院| 一级a性色生活片久久无| 色婷婷综合久久久久中文一区二区 | 久久国产精品99精品国产987| 日韩精品国产自在久久现线拍| 欧美麻豆久久久久久中文| 久久亚洲AV成人无码| 好久久免费视频高清| 亚洲精品国产综合久久一线| 日韩精品久久无码人妻中文字幕| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 很黄很污的网站久久mimi色| 一本色道久久99一综合| 国产999精品久久久久久| 亚洲人成网亚洲欧洲无码久久| 久久精品视频网| 性欧美大战久久久久久久久 | 久久久久亚洲AV成人片| 久久精品亚洲福利| 丰满少妇高潮惨叫久久久| 97精品依人久久久大香线蕉97| 久久国产成人精品国产成人亚洲| 99久久久精品| 久久Av无码精品人妻系列| 狠狠色丁香久久婷婷综合| 色综合久久久久综合99| 久久久久久A亚洲欧洲AV冫| 久久精品国产精品青草| 国产69精品久久久久久人妻精品| 久久久久九九精品影院| 成人午夜精品久久久久久久小说| www.久久热| 66精品综合久久久久久久| 99久久精品国产高清一区二区| aaa级精品久久久国产片| 久久综合综合久久狠狠狠97色88| 国产91色综合久久免费分享|