• <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>

            3d Game Walkman

            3d圖形渲染,網絡引擎 — tonykee's Blog
            隨筆 - 45, 文章 - 0, 評論 - 309, 引用 - 0
            數據加載中……

            游戲資源在線更新的思路

            總的來說,和JIT即時編譯機制有相通之處,就是一個創建時間的比較

             

            首先要明白:客戶端的文件如果是最新的,那么創建時間肯定晚于服務器上文件的創建時間,反之客戶端的文件就是舊的需要更新了,但是為了提高更新效率,并不是一個個和服務器上的文件做對比

            而是建立一個文件列表索引文件,里面記錄服務器上的“最新版”所有文件的創建時間,首先更新本地的索引文件,如果更新了,說明服務器上的文件列表有更新,然后和本地做對比,整理一份需要更新或新建的文件列表清單,然后主動連接服務器進行下載,全部完成以后,在索引文件進行記錄,更新完一個就記錄一個ok,這樣方便“斷點續傳”,所有都更新完成,全部是ok了,就證明本地都是最新的了,不過這里面有個小問題是值得注意的,本地文件的創建時間不能是本地計算機的時間,應該下載完以后,修改成服務器的當前時間,(比如如果本地時間設置到了一年以前)那本地的列表可能永遠都是舊的,每次都要更新,這是可怕的。

            通過這個文件列表索引,能大大提高更新效率,而且也能做好版本的控制。

            另外,更新服務器一般和游戲服務器分離,大致思路就是這樣

            打包和網絡傳輸方面,自己封裝一套序列化和反序列化的IO流協議就可以了,游戲里面這些都必須是最基本的功能了

            當然,這套思路還有一些不完善的地方,比如更新正在運行的exe或一些內存保護的DLL,是比較麻煩的事情,需要盡量避免

            posted on 2009-05-08 23:27 李侃 閱讀(2372) 評論(9)  編輯 收藏 引用 所屬分類: 網絡模塊

            評論

            # re: 游戲資源在線更新的思路  回復  更多評論   

            本人的思路,不用比較創建的時間,用版本號來比較不是危險性低一些么。每個文件都有一個版本號,更新一次版本號add下。本地一份文件列表(包含文件版本號),更新的時候如你所說,下載一份文件列表(同樣是有版本號的)比較版本來更新。本人的看法,還請斟酌.
            2009-05-09 14:03 | miwei

            # re: 游戲資源在線更新的思路  回復  更多評論   

            那DLL里面的版本號呢?功能模塊的DLL都是編譯器生成的,你要在每個DLL里面再附加資源信息嗎?我覺得有點繁瑣了。何況如果每個文件都去解析里面的版本號的數據,速度是會很慢的,不僅繁瑣,而且更難控制。
            不過一些版本控制軟件的卻是加了版本號的,但也是有版本索引文件去記錄這些版本,但絕對沒有要求一定要在源文件中去加版本號。所以時間要素控制版本是高效便宜的做法
            2009-05-09 22:42 | 李侃

            # re: 游戲資源在線更新的思路  回復  更多評論   

            有點問題:
            如果按照樓主的做法,那么每次更新都需要檢查。目前客戶端資源都是上G的,那么這個操作就會非常耗時。
            而且這么做服務器的資源必須零散存放。
            但目前資源基本都是打包出現的。

            樓主的這個操作是需要的,只是在客戶端出現資源不完整時候才需要這么做。一般值需要比較版本,下載壓縮包,更新就可以了。
            2009-05-10 13:19 | chib

            # re: 游戲資源在線更新的思路  回復  更多評論   

            這種方法有點麻煩。。
            倒不如生成一個XML里面寫入各個文件的名稱和md5碼。。
            這樣在讀取下載XML后對比客戶端的XML文件里的MD5就行了。。
            2009-05-10 15:10 | 笨笨狼

            # re: 游戲資源在線更新的思路  回復  更多評論   

            用客戶機本地的時間是非常不安全的,用戶有可能因為某種原因修改時間。
            笨笨狼同學的辦法是現在網游大多采用的一種方法。不過需要注意網絡的緩存問題,最好用FTP服務器來存放XML文件。
            2009-05-11 09:34 | kevin.c

            # re: 游戲資源在線更新的思路[未登錄]  回復  更多評論   

            我們的做法:
            做一個更新服務器,用來匹配資源版本號。
            客戶端每次登陸前都先連接更新服務器,如果發現有新的版本,則去文件服務器(http,ftp服務器)下載更新包。之后客戶端本地解壓打包就完成了更新。
            2009-05-20 08:39 | christanxw

            # re: 游戲資源在線更新的思路  回復  更多評論   

            既然客戶端那么大,可以嘗試用P2P 。
            2009-05-22 16:26 | wangok

            # re: 游戲資源在線更新的思路  回復  更多評論   

            你在樣不太好的。 因為我們以前這樣做過,當時打過包后。一個GUI.xx就是40MB 假如想更新一個圖片就要更新40m的包 ,如果詳細劃分包里面的文件。
            那文件列表就會很大。所以這并不太完美。 最后我也是和 christanxw 的做法一樣了,。
            2009-10-13 17:14 | Johnson

            # re: 游戲資源在線更新的思路  回復  更多評論   

            如何獲得服務器上文件的創建時間捏?
            2014-04-29 16:23 | jcjc
            久久精品成人欧美大片| 99久久久久| 久久久久亚洲av无码专区| 久久精品天天中文字幕人妻| 亚洲国产精品无码久久一线| 狠色狠色狠狠色综合久久 | 国产精品久久久久久久久久免费| 香蕉久久一区二区不卡无毒影院 | 亚洲人AV永久一区二区三区久久| 亚洲熟妇无码另类久久久| 99久久综合国产精品二区| 99精品国产综合久久久久五月天 | 久久国产精品无| 久久电影网一区| 伊人色综合久久天天人手人婷 | 久久午夜夜伦鲁鲁片免费无码影视| 精品久久久久久亚洲精品| 久久笫一福利免费导航 | 国产V亚洲V天堂无码久久久| 久久久久久亚洲精品不卡| 久久99热狠狠色精品一区| 久久综合给合久久狠狠狠97色69 | 国产激情久久久久影院小草| 人妻精品久久久久中文字幕一冢本| 久久久久国产一区二区| 亚洲精品国产成人99久久| 久久久婷婷五月亚洲97号色| 久久久久久久女国产乱让韩| 久久久精品波多野结衣| 国产精品免费久久| 亚洲国产精品久久| 91久久九九无码成人网站| 久久成人精品视频| 国产福利电影一区二区三区久久老子无码午夜伦不 | 色综合久久中文综合网| 国内精品久久国产大陆| 久久99国产精品久久99果冻传媒 | 亚洲国产精品久久电影欧美| 精品一二三区久久aaa片| 性色欲网站人妻丰满中文久久不卡| 久久精品国产乱子伦|