對(duì)應(yīng)的文件信息一直存儲(chǔ),所述壓縮及加密模塊對(duì)相應(yīng)文 件信息進(jìn)行壓縮時(shí),生成的壓縮包包括有兩種: 壓縮包只包括主文檔,所述主文檔包括包頭、文件數(shù)據(jù)區(qū)和樹(shù)信息區(qū);或者 壓縮包包括主文檔和樹(shù)索引文件,所述主文檔包括包頭和文件數(shù)據(jù)區(qū),所述樹(shù)索引文 件包括包頭和樹(shù)索引文件; 所述包頭至少包括文件頭的長(zhǎng)度及版本信息,且包頭中存儲(chǔ)有對(duì)應(yīng)樹(shù)信息區(qū)的位置信 息,所述文件數(shù)據(jù)區(qū)存儲(chǔ)對(duì)應(yīng)的文件信息,所述樹(shù)信息區(qū)存儲(chǔ)對(duì)應(yīng)的樹(shù)索引文件。
[0026] 從W上對(duì)存儲(chǔ)模塊100的敘述中可知,本發(fā)明采用了Windows文件系統(tǒng)中的結(jié)構(gòu), 即多級(jí)文件樹(shù)系統(tǒng),相應(yīng)的,存儲(chǔ)模塊100中的路徑支持正反斜杠,且不區(qū)分大小寫(xiě)。對(duì)應(yīng) 的,其中的文件信息的屬性包括文件名、文件大小、修改時(shí)間、壓縮信息、父目錄索引、存儲(chǔ) 信息等,每個(gè)目錄的信息則包括路徑、文件/目錄數(shù)量、父目錄索引,還可W包括目錄路徑的 化Sh等。對(duì)應(yīng)的,捜索模塊101支持對(duì)指定目錄下進(jìn)行遍歷子目錄和子文件、判斷指定路徑 的文件目錄是否存在等操作,也可W獲取指定文件的名字、大小和修改日期等信息。
[0027] 本發(fā)明的優(yōu)選實(shí)施例中,參照?qǐng)D2所示,所述統(tǒng)一下載平臺(tái)模塊102包括: 多進(jìn)程處理單元200,用于對(duì)接收游戲客戶端發(fā)送的進(jìn)程,對(duì)進(jìn)程進(jìn)行排序,并按照序 列處理進(jìn)程; 信息識(shí)別單元201,用于在多進(jìn)程處理單元200處理某個(gè)線程時(shí),讀取該進(jìn)程目錄下的 配置文件,根據(jù)配置信息獲取對(duì)應(yīng)文件信息的數(shù)量、路徑及下載地址,并返回至多進(jìn)程處理 單元; 在線下載單元202,用于識(shí)別多進(jìn)程處理單元所接收的進(jìn)程是否為在線下載進(jìn)程,在識(shí) 別為在線下載進(jìn)程時(shí),為對(duì)應(yīng)進(jìn)程設(shè)置高優(yōu)先級(jí)權(quán)重; 進(jìn)程管理單元203,用于在多個(gè)進(jìn)程同時(shí)下載時(shí),統(tǒng)一管理下載中的共享信息及下載流 量,所述共享信息包括多個(gè)游戲客戶端下載同一文件信息和同一用戶端重復(fù)下載同一文件 信息。
[0028] 所述多進(jìn)程處理單元200、信息識(shí)別單元201、在線下載單元202及進(jìn)程管理單元 203均為本發(fā)明所述統(tǒng)一下載平臺(tái)模塊102的具體實(shí)現(xiàn)過(guò)程,本發(fā)明通過(guò)統(tǒng)一下載平臺(tái)模塊 102實(shí)現(xiàn)對(duì)文件系統(tǒng)的統(tǒng)一規(guī)劃與管理。一是對(duì)多線程的規(guī)劃與管理,其所接收的多線程統(tǒng) 一由多進(jìn)程處理單元200進(jìn)行處理,排序時(shí),可W按照時(shí)間優(yōu)先的方式,或者先進(jìn)先出的找 列方式,或者其它方式,嚴(yán)格的限制排列方式對(duì)本發(fā)明的實(shí)現(xiàn)不具備顯著的意義,因此,采 取其他途徑實(shí)現(xiàn)對(duì)進(jìn)程的管理,亦是可實(shí)現(xiàn)本發(fā)明的具體方式或方法。二是在處理某個(gè)線 程時(shí)的規(guī)劃與管理,本發(fā)明在處理某個(gè)線程時(shí),信息識(shí)別單元201即可讀取該進(jìn)程目錄下的 配置文件,W獲取此進(jìn)程需要下載的文件的地址、數(shù)量等信息,之后,通過(guò)捜索模塊101從存 儲(chǔ)模塊100當(dāng)中查找即可。=是對(duì)在線下載進(jìn)程的規(guī)劃與管理,由于在線下載的進(jìn)程直接與 用戶對(duì)游戲的體驗(yàn)相關(guān),因此,其申請(qǐng)必須進(jìn)行優(yōu)先處理,本發(fā)明按照最常規(guī)的方式,在識(shí) 別在線進(jìn)程后,對(duì)其賦予較高的優(yōu)先級(jí),需要指出的時(shí),本發(fā)明只是具體的闡述了一種實(shí)現(xiàn) 在線進(jìn)程快速下載的一種方式,對(duì)于其它處理方式,比如在線下載進(jìn)程的獨(dú)占性處理等,均 為本發(fā)明可實(shí)現(xiàn)的范圍之內(nèi)。四是對(duì)多個(gè)進(jìn)程同時(shí)下載的規(guī)劃與管理,本發(fā)明對(duì)于多個(gè)進(jìn) 程同時(shí)下載,要兼顧不同進(jìn)程下載的速度,合理地控制下載的流量,比如相應(yīng)的下載軟件 (迅雷、BT等)均可設(shè)置對(duì)應(yīng)下載速度,W避免影響用戶其它的正常上網(wǎng),進(jìn)程管理單元203 可根據(jù)用戶的具體要求,對(duì)多個(gè)進(jìn)程進(jìn)行同時(shí)管理,有時(shí)多個(gè)進(jìn)程所下載的文件內(nèi)容相同, 比如網(wǎng)吧當(dāng)中,同一用戶可能下載重復(fù)性的文件(大型游多為團(tuán)體游戲,需要多人組團(tuán)組 合,單個(gè)用戶在游戲當(dāng)中,經(jīng)常會(huì)觸發(fā)同一進(jìn)程下載同一文件,或觸發(fā)不同的進(jìn)程下載同一 文件),本發(fā)明可W識(shí)別下載內(nèi)容相同的進(jìn)程,避免重復(fù)下載,同樣,不同的進(jìn)程有可能同時(shí) 下載相同的文件,進(jìn)程管理單元203亦可允許多個(gè)進(jìn)程同時(shí)下載同一文件。
[0029] 參照?qǐng)D3所示,多個(gè)游戲或一個(gè)游戲的多個(gè)進(jìn)程通過(guò)連接統(tǒng)一下載平臺(tái)模塊進(jìn)行 資源下載。同一個(gè)游戲的多個(gè)進(jìn)程,可W共享下載的內(nèi)容,即進(jìn)程A請(qǐng)求過(guò)的資源文件,進(jìn)程 B無(wú)需重復(fù)下載。本發(fā)明實(shí)現(xiàn)時(shí),多個(gè)游戲可W使用同一個(gè)下載平臺(tái)進(jìn)程,W達(dá)到整體的負(fù) 載控制。不同游戲由于目錄不同,包文檔互相獨(dú)立,可W分別配置URL,即使重名也不會(huì)有沖 突。在擴(kuò)展性方面,經(jīng)過(guò)擴(kuò)充,本發(fā)明的文件系統(tǒng)完全可W實(shí)現(xiàn)局域網(wǎng)級(jí)的下載共享,能有 效提高網(wǎng)吧用戶的體驗(yàn),亦可W利用P2P傳輸提高下載速度。W上的具體實(shí)現(xiàn),根據(jù)W上所 述對(duì)附圖2具體內(nèi)容的說(shuō)明。
[0030] 網(wǎng)絡(luò)游戲的更新,通常是在線性的更新,為了進(jìn)一步提升用戶的體驗(yàn),本發(fā)明所述 文件系統(tǒng)還包括在線發(fā)布模塊,所述在線發(fā)布模塊包括: 更新包生成單元,用于通過(guò)重新創(chuàng)建或更新的方式生成需要更新的完整數(shù)據(jù)包 XXX.fpc; 分離樹(shù)單元,用于對(duì)完整數(shù)據(jù)包XXX .巧C進(jìn)行分離樹(shù)索引文件操作,獲取對(duì)應(yīng)的樹(shù)索引 文件 xxx.fpci; 上傳單元,用于改名樹(shù)索引文件后(改名后為XXX. server, fpci)將其與數(shù)據(jù)包一起上 傳至HTTP下載服務(wù)器。
[0031] W更新的方式生成數(shù)據(jù)包時(shí),文件大小及修改時(shí)間相同的,認(rèn)為是未改變的文件, 不必進(jìn)行更新。
[0032] 若版本更新不是關(guān)鍵更新時(shí),無(wú)需將全服玩家踢出客戶端,則此時(shí)不能直接替換 已有的服務(wù)器文件,否則會(huì)出現(xiàn)版本不匹配的情況。本發(fā)明將不同版本客戶端連接不同的 目錄,并在適當(dāng)時(shí)刪除舊版本的資源文件。版本更新時(shí)將同時(shí)更新配置文件,沒(méi)有重新啟動(dòng) 的客戶端將繼續(xù)連接舊的數(shù)據(jù)源。
[0033] 游戲客戶端使用在線資源時(shí),在第一次啟動(dòng)游戲或版本更新時(shí),下載最新的樹(shù)索 引文件X. server. fpci,之后,進(jìn)行創(chuàng)建包或樹(shù)結(jié)構(gòu)更新得到X. fpc和X.巧Ci,之后,F(xiàn)PCO庫(kù) 載入包文檔,并在使用過(guò)程中逐漸下載數(shù)據(jù)到X.巧C中W及修改XXX.巧Ci。
[0034] 為了進(jìn)一步對(duì)發(fā)明進(jìn)行說(shuō)明和充分實(shí)現(xiàn)本發(fā)明的具體應(yīng)用,存儲(chǔ)模塊100中的文 件被壓縮及加密模塊104壓縮后,其整包的空間大小W小于IG為宜,考慮到文件包上傳方便 W小于500M為宜;包中單個(gè)文件的大小W不超過(guò)16位數(shù)字(二進(jìn)制)即65535為宜,當(dāng)單個(gè)文 件大于16位數(shù)字時(shí),則進(jìn)行拆包。(常見(jiàn)中小規(guī)模MMORPG游戲的文件資源數(shù)量小于3000,大 型規(guī)模的MMORPG小于30000。) 參照?qǐng)D4所示,圖中所示FPCO層是FPC的派生類(lèi),其可W提供更多接日。游戲進(jìn)程和統(tǒng)一 下載平臺(tái)進(jìn)程將讀取該游戲進(jìn)程目錄下的同一份配置文件,根據(jù)配置決定包文檔的數(shù)量和 路徑W及對(duì)應(yīng)的下載地址。同一個(gè)游戲的多個(gè)進(jìn)程會(huì)得到資源共享;不同的游戲的包文檔 互相獨(dú)立,不會(huì)發(fā)生沖突。
[0035] 底層的FPC庫(kù)對(duì)同一個(gè)包文檔使用內(nèi)存映射文件共享,統(tǒng)一下載平臺(tái)進(jìn)程將下載 到的數(shù)據(jù)寫(xiě)入包文檔中,游戲進(jìn)程可W直接讀取最新內(nèi)容而不需要IO或進(jìn)程間通知。
[0036] 游戲邏輯使用"下載客戶端庫(kù)"連接下載平臺(tái)和得到資源讀取接口。
[0037] 下載客戶端庫(kù)處理對(duì)下載平臺(tái)的連接,管理多個(gè)包文檔和提供獲取包對(duì)象的接 P。
[003引FPC庫(kù)負(fù)責(zé)對(duì)包文檔數(shù)據(jù)的讀取操作。
[0039] 下載服務(wù)端庫(kù)處理包文檔初始化工作(當(dāng)包文檔不存在時(shí))、游戲進(jìn)程的連接和斷 開(kāi)、請(qǐng)求對(duì)象的創(chuàng)建工作和釋放、資源數(shù)據(jù)更新、通知游戲進(jìn)程觸發(fā)請(qǐng)求完成事件。
[0040] 下載服務(wù)端庫(kù)調(diào)用FPCO層,F(xiàn)PCO層通過(guò)回調(diào)方式調(diào)用CML下載庫(kù)。
[0041] 資源到達(dá)后,F(xiàn)PC庫(kù)負(fù)責(zé)對(duì)包文檔數(shù)據(jù)的寫(xiě)入操作。
[0042] 下面,本發(fā)明從線程的角度對(duì)本發(fā)明所述的文件系統(tǒng)作進(jìn)一步的說(shuō)明,參照?qǐng)D5所 示各線程的關(guān)系和處理流程: 1) 首先對(duì)于一個(gè)資源需求線程(需要讀取文件數(shù)據(jù)的線程),判斷資源需要下載后,申 請(qǐng)一個(gè)請(qǐng)求對(duì)象(可W顯示地創(chuàng)建或被包裝在阻塞讀取調(diào)用內(nèi)); 2) 請(qǐng)求處理線程創(chuàng)建一個(gè)空的請(qǐng)求對(duì)象返回給資源需求線程; 3) 資源需求線程設(shè)置好請(qǐng)求信息后(一個(gè)請(qǐng)求可W包含多個(gè)文件請(qǐng)求),發(fā)送給統(tǒng)一下 載平臺(tái)進(jìn)程中的請(qǐng)求處理線程處理,并得到一個(gè)事件對(duì)象Mutex,隨時(shí)檢測(cè)或同步阻塞方式 等待Mutex; 4) 請(qǐng)求處理線程檢查過(guò)請(qǐng)求信息后(并認(rèn)為需要下載時(shí)),向文檔空間管理器申請(qǐng)資源 文件的存儲(chǔ)空間,并使用下載線程池下載數(shù)據(jù)。
[0043] 5)下載線程處理完下載后,通知請(qǐng)求處理線程一個(gè)資源文件完成下載,若游戲進(jìn) 程有注冊(cè)窗口文件請(qǐng)求完成通知消息,則發(fā)送該消息; 6) 請(qǐng)求處理線程枚舉有關(guān)運(yùn)個(gè)資源文件的所有請(qǐng)求,更新它們的進(jìn)度,如果請(qǐng)求內(nèi)所 有資源文件都完成下載,則設(shè)置請(qǐng)求的事件對(duì)象Mutex;若游戲進(jìn)程有注冊(cè)窗口請(qǐng)求完成通 知消息,則發(fā)送該消息; 7) 資源需求線程發(fā)覺(jué)事件處理完后,可W釋放請(qǐng)求對(duì)象,并可使用文件資源; 8) 請(qǐng)求處理線程發(fā)覺(jué)請(qǐng)求對(duì)象被釋放后,銷(xiāo)毀請(qǐng)求對(duì)象。
[0044] 實(shí)施例2: W下代碼將演示如何啟動(dòng)下載服務(wù),W及找到MapFile/1.Wbf. ter并請(qǐng)求下載。
冉includewpiIePackOnline.