專利背景
許多網路套用都為其自身提供了用於安裝在用戶終端設備上的客戶端程式(簡稱客戶端)。對於提供客戶端的網路套用,網路套用的客戶端需要先被下載並安裝到用戶終端設備上,然後通過客戶端與伺服器之間的信息互動,用戶可以在客戶端上實現對網路套用的使用和體驗。通過客戶端向用戶提供網路套用,使得網路套用的一些數據可以隨客戶端保存在用戶終端設備本地,從而避免用戶每次使用網路套用時都從伺服器下載全部數據,減少了用戶使用網路套用時需要下載的數據以及網路套用使用過程中對網路資源的占用。
然而,隨著網路套用所涉及的數據量越來越大,網路套用的客戶端所包含資源的數據量也越來越大,導致用戶下載客戶端需要花費的時間也越來越長,這不僅造成了用戶使用上的不便,也使得許多網路套用的用戶在客戶端下載的過程中流失。為了節省用戶下載客戶端需要花費的時間,使得用戶能夠儘早進入網路套用的使用和體驗而不至於網路套用的用戶流失,一些網路套用採用了微客戶端(簡稱微端)技術。具體地說,在微客戶端技術中,提供給用戶下載的客戶端(即微端)僅包含網路套用最初使用時所必備的資源,而在客戶端運行的過程中,通過接管客戶端的檔案訪問,當發現客戶端當前請求訪問的資源不存在於客戶端本地時去伺服器上下載該資源,直至網路套用提供給用戶的所有資源都被下載到客戶端本地,從而在用戶終端設備上形成完整的客戶端。通過微客戶端技術,用戶可以邊使用網路套用邊下載網路套用的資源,而無需等到完整客戶端下載完成再使用網路套用,從而減小了用戶需要下載的客戶端中初始資源的數據量,節省了用戶下載客戶端所花費的時間。
發明內容
但是,隨著網路套用的資源間依賴關係越來越複雜,客戶端在某些資源載入過程中需要訪問的資源也越來越多。此時,對於本次資源載入過程中所需要的資源,客戶端在資源載入過程中往往並不是一次性地去請求訪問所有的資源,而是分多次去分別請求訪問一部分資源。具體地,在資源載入過程中,客戶端先發起對一部分資源的訪問請求,訪問到這部分資源時對這部分資源進行解析,之後再發起對下一部分資源的訪問請求,直至本次資源載入過程所需要的資源都被下載,完成本次資源載入過程。例如,對於三維(3D)網路遊戲來說,相對於二維(2D)網路遊戲,客戶端在對一個角色或場景進行載入時,3D遊戲需要載入的資源會比2D遊戲多很多。同樣是對一個角色或場景進行載入,2D遊戲的客戶端通常僅需要載入圖片檔案,3D遊戲的客戶端則需要先獲得角色或場景的模型描述檔案,通過解析描述檔案查找到需要訪問的貼圖、動畫、特效等檔案,再獲得查找到的貼圖、動畫、特效等檔案,從而完成角色或場景的載入。而且,3D遊戲中角色或場景通常都比較複雜,可能由多部分相互依賴的資源組成,每部分資源都要分別經過描述檔案的下載、解析以及貼圖、動畫、特效等檔案的下載。
由此可見,對於像3D網路遊戲這樣資源間存在複雜依賴關係的網路套用,在資源載入過程中需要經歷的“解析—下載”鏈條比較長,而對於首次進行的資源載入過程,由於截至2014年6月技術中採用微端技術的客戶端僅下載當前請求訪問且本地不存在的資源,就使得客戶端在資源載入過程中需要按照“解析—下載”鏈條反覆多次去下載其請求訪問的資源,從而導致資源載入過程的延時較長,並且,由於往往每次請求訪問的資源都無法占用所有的下載執行緒,也造成了下載執行緒的浪費。
因此在對彼此間存在複雜依賴關係的資源進行首次載入時,採用微端技術的網路套用客戶端由於僅下載當前請求訪問的資源,既導致了客戶端載入資源的速度較慢,造成載入延時較長,也導致了下載執行緒的浪費,這是非常令人煩惱的過程。
為此,需要一種改進的資源下載的方法和設備,以避免由於採用微端技術的網路套用客戶端僅下載當前請求訪問的資源,而導致的客戶端載入資源速度較慢、載入延時較長以及浪費下載執行緒的缺陷。
《一種資源下載的方法和設備》的實施方式期望提供一種資源下載的方法和設備。
在《一種資源下載的方法和設備》實施方式的第一方面中,提供了一種資源下載的方法,包括:截獲客戶端對當前資源的訪問請求;通過資源關係索引檔案,查找與所述當前資源具有依賴關係且所述客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的;從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
在《一種資源下載的方法和設備》實施方式的第二方面中,提供了一種資源下載的設備,包括:訪問截獲模組,用於截獲對當前資源的訪問請求;預測資源查找模組,用於通過資源關係索引檔案,查找與所述當前資源具有依賴關係且所述客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的;第一下載模組,用於從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
根據《一種資源下載的方法和設備》實施方式用於資源下載的方法和設備,對採用微端技術的客戶端來說,在客戶端發起對當前資源的訪問時,可以通過預先依據完整客戶端中資源之間依賴關係而生成的資源關係索引檔案,查找出與當前請求訪問的當前資源具有依賴關係且客戶端本地不存在的資源作為預測資源,並可以利用從可用於下載該預測資源的未占用執行緒中分配出的第一執行緒來下載該預測資源到客戶端本地。因此,由於與當前資源具有依賴關係的預測資源通常是當前資源訪問之後就要訪問的資源,一方面使得當前資源訪問之後需要訪問且本地不存在的預測資源可以預先地在客戶端發起對當前資源的訪問請求時下載,而無需等到訪問並解析當前資源之後客戶端發起對預測資源的訪問請求時再去下載,從而顯著地減少了資源載入過程中客戶端下載資源的次數,加快了客戶端資源首次載入的速度,並縮短了資源載入過程的載入延時,另一方面使得請求訪問時當前資源未占用的執行緒可以被用來下載預測資源,從而避免了下載執行緒的浪費。
附圖說明
圖1示意性地示出了《一種資源下載的方法和設備》的實施方式的一個示例性套用場景的框架示意圖;
圖2示意性地示出了《一種資源下載的方法和設備》中資源下載的方法一實施例的流程圖;
圖3示意性地示出了《一種資源下載的方法和設備》實施例中資源間依賴關係示例的示意圖;
圖4示意性地示出了《一種資源下載的方法和設備》中資源下載的方法另一實施例的流程圖;
圖5示意性地示出了《一種資源下載的方法和設備》實施例中一個具體套用場景示例下的下載任務一處理方式的示意圖;
圖6示意性地示出了《一種資源下載的方法和設備》中資源下載的方法又一實施例的流程圖;
圖7示意性地示出了《一種資源下載的方法和設備》中資源下載的方法再一實施例的流程圖;
圖8示意性地示出了《一種資源下載的方法和設備》實施例中待補丁數據合併一實施方式的實例示意圖;
圖9示意性地示出了《一種資源下載的方法和設備》中資源下載的設備一實施例的結構圖;
圖10示意性地示出了《一種資源下載的方法和設備》中資源下載的設備另一實施例的結構圖;
圖11示意性地示出了《一種資源下載的方法和設備》中資源下載的設備又一實施例的結構圖;
圖12示意性地示出了《一種資源下載的方法和設備》中資源下載的設備再一實施例的結構圖;
圖13示意性地示出了《一種資源下載的方法和設備》中資源下載的設備又再一實施例的結構圖;
在附圖中,相同或對應的標號表示相同或對應的部分。
技術領域
《一種資源下載的方法和設備》的實施方式涉及信息技術領域,更具體地,《一種資源下載的方法和設備》的實施方式涉及一種資源下載的方法和設備。
權利要求
1.一種資源下載的方法,包括:
A)、截獲對當前資源的訪問請求;
B)、通過資源關係索引檔案,查找與所述當前資源具有依賴關係且客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的;
C)、從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到客戶端本地;回響於所述預測資源已分得第一執行緒且還存在可用於下載隨機資源的未占用執行緒,隨機選取所述客戶端本地不存在的資源作為隨機資源,並利用所述可用於下載隨機資源的未占用執行緒下載所述隨機資源。
2.根據權利要求1所述的方法,其中,所述C)包括:將下載所述預測資源的第一下載任務加入到第一任務集合中;回響於所述第一下載任務分得所述第一執行緒,從所述第一任務集合中取出所述第一下載任務,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
3.根據權利要求2所述的方法,其中,按照各個下載任務加入第一任務集合的時間由後到先的順序為所述第一任務集合中的各個下載任務分配執行緒。
4.根據權利要求1所述的方法,還包括:回響於所述客戶端本地不存在所述當前資源,從可用於下載所述當前資源的未占用執行緒中分配出第二執行緒,並利用所述第二執行緒下載所述當前資源到所述客戶端本地;回響於所述當前資源已分得第二執行緒且還存在可用於下載所述預測資源的未占用執行緒,進入C)。
5.根據權利要求4所述的方法,所述回響於所述客戶端本地不存在所述當前資源,從可用於下載所述當前資源的未占用執行緒中分配出第二執行緒,並利用所述第二執行緒下載所述當前資源到所述客戶端本地,包括:回響於所述客戶端本地不存在所述當前資源,將下載所述當前資源的第二下載任務加入到第二任務集合中;回響於所述第二下載任務分得所述第二執行緒,從所述第二任務集合中取出所述第二下載任務,並利用所述第二執行緒下載所述當前資源到所述客戶端本地。
6.根據權利要求5所述的方法,其中,按照各個下載任務加入第二任務集合的時間由先到後的順序為所述第二任務集合中的各個下載任務分配執行緒。
7.根據權利要求1或4所述的方法,其中,所述客戶端可用於下載資源的執行緒包括通用執行緒和專用執行緒,所述通用執行緒可用於下載所述當前資源、所述預測資源和所述隨機資源,所述專用執行緒僅可用於下載所述當前資源。
8.根據權利要求1所述的方法,還包括:下載所述客戶端的補丁檔案;以所述補丁檔案中所要修改的原始資源不存在於所述客戶端本地的補丁數據作為待補丁數據,記錄所述待補丁數據所要修改的原始資源;回響於所述待補丁數據所要修改的原始資源下載到所述客戶端本地,對所述客戶端套用所述待補丁數據。
9.根據權利要求8所述的方法,還包括:以所述補丁檔案中所要修改的原始資源存在於所述客戶端本地的補丁資源作為第一即時補丁數據,對所述客戶端套用所述第一即時補丁數據;以所述補丁檔案中用於為所述客戶端增加資源的補丁數據作為第二即時補丁數據,對所述客戶端套用所述第二即時補丁數據;以所述補丁檔案中長度超過一個區塊的補丁數據為第三即時補丁數據,對所述客戶端套用所述第三即時補丁數據。
10.一種資源下載的設備,包括:訪問截獲模組,用於截獲對當前資源的訪問請求;預測資源查找模組,用於通過資源關係索引檔案,查找與所述當前資源具有依賴關係且客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的;第一下載模組,用於從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地;第三下載模組,用於回響於所述預測資源已分得第一執行緒且還存在可用於下載隨機資源的未占用執行緒,隨機選取所述客戶端本地不存在的資源作為隨機資源,並利用所述可用於隨機資源的未占用執行緒下載所述隨機資源。
11.根據權利要求10所述的設備,其中,所述第一下載模組包括:第一集合加入子模組,用於將下載所述預測資源的第一下載任務加入到第一任務集合中;第一集合取出子模組,用於回響於所述第一下載任務分得所述第一執行緒,從所述第一任務集合中取出所述第一下載任務,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
12.根據權利要求11所述的設備,其中,按照各個下載任務加入第一任務集合的時間由後到先的順序為所述第一任務集合中的各個下載任務分配執行緒。
13.根據權利要求10所述的設備,還包括:第二下載模組,用於回響於所述客戶端本地不存在所述當前資源,從可用於下載所述當前資源的未占用執行緒中分配出第二執行緒,並利用所述第二執行緒下載所述當前資源到所述客戶端本地;第一觸發模組,用於回響於所述當前資源已分得第二執行緒且還存在可用於下載所述預測資源的未占用執行緒,觸發所述第一下載模組。
14.根據權利要求13所述的設備,其中,所述第二下載模組包括:第二集合加入子模組,用於回響於所述客戶端本地不存在所述當前資源,將下載所述當前資源的第二下載任務加入到第二任務集合中;第二集合取出子模組,用於回響於所述第二下載任務分得所述第二執行緒,從所述第二任務集合中取出所述第二下載任務,並利用所述第二執行緒下載所述當前資源到所述客戶端本地。
15.根據權利要求14所述的設備,其中,按照各個下載任務加入第二任務集合的時間由先到後的順序為所述第二任務集合中的各個下載任務分配執行緒。
16.根據權利要求10或13所述的設備,其中,所述客戶端可用於下載資源的執行緒包括通用執行緒和專用執行緒,所述通用執行緒可用於下載所述當前資源、所述預測資源和所述隨機資源,所述專用執行緒僅可用於下載所述當前資源。
17.根據權利要求10所述的設備,還包括:補丁下載模組,用於下載所述客戶端的補丁檔案;補丁記錄模組,用於以所述補丁檔案中所要修改的原始資源不存在於所述客戶端本地的補丁數據作為待補丁數據,記錄所述待補丁數據所要修改的原始資源;第一補丁套用模組,用於回響於所述待補丁數據所要修改的原始資源下載到所述客戶端本地,對所述客戶端套用所述待補丁數據。
18.根據權利要求17所述的設備,還包括:第二補丁套用模組,用於以所述補丁檔案中所要修改的原始資源存在於所述客戶端本地的補丁資源作為第一即時補丁數據,對所述客戶端套用所述第一即時補丁數據;第三補丁套用模組,用於以所述補丁檔案中用於為所述客戶端增加資源的補丁數據作為第二即時補丁數據,對所述客戶端套用所述第二即時補丁數據;第四補丁套用模組,用於以所述補丁檔案中長度超過一個區塊的補丁數據為第三即時補丁數據,對所述客戶端套用所述第三即時補丁數據。
實施方式
發明概述
《一種資源下載的方法和設備》人發現,微端技術中,客戶端在發起訪問請求時僅是去下載當前請求訪問的資源,因此,如果一個首次進行的資源載入過程中需要載入的資源彼此間具有複雜依賴關係,客戶端就需要按照訪問的順序反覆多次去下載,每一次下載的僅是客戶端當前請求訪問的資源,而往往下載客戶端當前請求訪問的資源並不會占用所有的執行緒,這就導致資源載入過程中無法同時利用所有的執行緒下載需要載入的資源,從而不僅使得客戶端載入資源的速度較慢、載入延時較長,還造成了下載執行緒的浪費。
基於上述分析,《一種資源下載的方法和設備》的基本思想在於:為了使得資源載入過程中可以儘可能同時利用更多的執行緒來下載資源,而不是僅下載客戶端當前請求訪問的資源,可以預先地確定出哪些資源是該資源載入過程中需要訪問的資源,也即可以預測出客戶端當前還未請求訪問但很快就會請求訪問的資源,從而利用下載當前請求訪問的資源之外未占用的執行緒來下載預測出的資源,這樣不僅可以使得資源載入過程中需要載入的資源下載速度加快,從而加快資源載入的速度並縮短載入延時,而且還使得下載執行緒得到了充分的利用。其中,由於資源載入過程中需要載入的資源彼此間具有依賴關係,因此,預測的方式,具體可以是通過預先依據完整客戶端中資源之間依賴關係而生成的資源關係索引檔案,查找與當前請求訪問的當前資源具有依賴關係的資源作為預測資源。
需要說明的是,在本文中,術語“當前資源”、“預測資源”等表示的是客戶端對資源需求的緊急程度。例如,“當前資源”表示的是客戶端發起訪問請求所針對的資源。又如,“預測資源”表示的是通過資源關係索引檔案而查找出的與當前資源具有依賴關係的資源。
在介紹了《一種資源下載的方法和設備》的基本原理之後,下面具體介紹《一種資源下載的方法和設備》的各種非限制性實施方式。
套用場景總覽
首先參考圖1,圖1是《一種資源下載的方法和設備》的實施方式的一個示例性套用場景的框架示意圖。其中,用戶通過用戶設備上的客戶端102與提供網路套用服務的伺服器101進行互動。本領域技術人員可以理解,圖1所示的框架示意圖僅是《一種資源下載的方法和設備》的實施方式可以在其中得以實現的一個示例。《一種資源下載的方法和設備》實施方式的適用範圍不受到該框架任何方面的限制。
需要注意的是,此處的用戶設備可以是截至2014年6月的、正在研發的或將來研發的、能夠通過任何形式的有線和/或無線連線(例如,Wi-Fi、LAN、蜂窩、同軸電纜等)實現其上客戶端102與伺服器101互動的任何用戶設備,包括但不限於:截至2014年6月的、正在研發的或將來研發的智慧型手機、非智慧型手機、平板電腦、膝上型個人計算機、桌面型個人計算機、小型計算機、中型計算機、大型計算機等。
還需要注意的是,此處的伺服器101僅是截至2014年6月的、正在研發的或將來研發的、能夠向用戶提供網路套用服務的設備的一個示例。《一種資源下載的方法和設備》的實施方式在此方面不受任何限制。
基於圖1所示的框架,客戶端102可以先截獲對當前資源的訪問請求,再通過資源關係索引檔案,查找與所述當前資源具有依賴關係且所述客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的、記錄具有依賴關係的資源間對應關係的檔案。然後,客戶端102可以從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
可以理解的是,《一種資源下載的方法和設備》的套用場景中,雖然此處和下面將《一種資源下載的方法和設備》實施方式的動作描述為由客戶端102執行,但是這些動作也可以部分由客戶端102執行、部分由伺服器101執行,或者完全由伺服器101執行。《一種資源下載的方法和設備》在執行主體方面不受限制,只要執行了《一種資源下載的方法和設備》實施方式所公開的動作即可。
示例性方法
下面結合圖2~8的套用場景,參考圖1來描述根據《一種資源下載的方法和設備》示例性實施方式的用於資源下載的方法。需要注意的是,上述套用場景僅是為了便於理解《一種資源下載的方法和設備》的精神和原理而示出,《一種資源下載的方法和設備》的實施方式在此方面不受任何限制。相反,《一種資源下載的方法和設備》的實施方式可以套用於適用的任何場景。
參見圖2,示出了《一種資源下載的方法和設備》中資源下載的方法一實施例的流程圖。在該實施例中,例如具體可以包括如下步驟:
步驟201、截獲對當前資源的訪問請求。
在採用微端技術的客戶端運行過程中,如果其發起訪問請求,則可以截獲該訪問請求,從而確定該訪問請求所針對的當前資源。可以理解的是,通過截獲訪問請求而確定當前資源,一方面可以是為了在當前資源不存在的情況下從伺服器上下載當前資源到客戶端本地,另一方面則可以是為了通過當前資源來預測客戶端接下來將要訪問的資源,從而實現預測資源在客戶端請求訪問之前的預先下載。
步驟202、通過資源關係索引檔案,查找與所述當前資源具有依賴關係且所述客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的。
其中,資源關係索引檔案中記錄的可以是具有依賴關係的資源之間的對應關係,其可以是預先放置在作為微端的客戶端中提供給用戶設備下載,也可以是用戶設備上的客戶端在運行過程中從伺服器上下載的。
可以理解的是,資源關係索引檔案需要預先依據網路套用的完整客戶端中各個資源之間依賴關係生成。
其中,資源之間具有依賴關係,可以是指為了實現一個資源載入過程而需要載入的資源。這些具有依賴關係的資源需要分多次訪問,各個資源指示了在其訪問之後需要訪問的資源。也即,通過對各個資源進行解析,可以確定在其訪問之後需要訪問的是哪些資源。
而在該實施例中,可以預先通過對完整客戶端的各個資源進行解析,確定在資源載入過程中表示各個資源之間訪問順序的依賴關係,並依據此依賴關係而生成資源關係索引檔案,而客戶端在運行過程中,可以通過資源關係索引檔案來查找出與當前資源具有依賴關係的資源,這些資源即是客戶端訪問當前資源之後可能將要訪問的資源,因此,將這些查找出的資源作為預測資源並在訪問當前資源的同時利用未占用執行緒去下載預測資源,就可以使得客戶端在訪問預測資源時無需再去下載,從而縮短了整個載入過程的載入延時。
例如,對於網路遊戲中一個實體的載入過程,其實體一般由模型(model)組成,而模型一般是由頂點、貼圖組成,有些模型還具有特效。對於網路遊戲中的模型載入,圖3示出了一種可能的資源間依賴關係示例的示意圖。其中,model和visual是描述檔案,這兩者是用於標識和描述模型,在客戶端引擎中通常用xml格式保存;fx是特效檔案,primitives是頂點檔案、bmp是貼圖檔案。可以理解的是,圖3中的兩個模型具有一個共用的貼圖檔案,這表示在完整客戶端的資源中同一個貼圖檔案是可以被多個模型共用的。
以圖3中的任意一個模型為例,其所用的資源可以看成是一顆樹。網路遊戲的客戶端在載入這一模型時,可以從這棵樹的根節點讀起,每讀一個節點就去解析該節點的檔案,從而獲取該節點的子節點信息,再去讀入子節點,直到整棵樹完全讀入,這樣就可以構建出該模型。例如,假設圖3左邊的模型為a1模型,其model檔案為a1.model,其visual檔案為a1.visual,其fx檔案為flash.fx,其primitives檔案為a1.primitives,其bmp檔案為skin.bmp,則:
a1.model的內容可以為:
<root>
<visual>
a1
</visual>
</root>
a1.visual的內容可以為:
<root>
<fx>
flash
</fx>
<primitive>
al
</primitive>
<texture>
skin.bmp
</texture>
</root>
由此可見,與a1.model檔案具有依賴關係的資源可以為a1.visual檔案,以及可以還包括flash.fx、a1.primitives和skin.bmp檔案。進一步而言,如果客戶端發起訪問請求所針對的當前資源是a1.model,那么通過資源關係索引檔案查找出的預測資源可以包括a1.visual以及flash.fx、a1.primitives、skin.bmp。
步驟203、從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
參考前述a1模型的示例,假設在客戶端處於微端的情況下,a1模型的所有檔案都在網路遊戲的伺服器上。此時,在對a1模型進行首次載入的過程中,如果採用截至2014年6月技術,客戶端僅下載當前發起訪問的當前資源,那么a1模型的載入過程可以表示為:下載al.model→解析a1.model→下載al.visual→解析a1.visual→並行下載flash.fx、al.primitives和skin.bmp→載入完成;而在該實施例中,客戶端在對當前資源發起訪問的同時,除了下載作為當前資源的a1.model,還可以同時利用可用於下載預測資源未占用執行緒來下載作為預測資源的a1.visual、flash.fx、a1.primitives、skin.bmp,那么在可用執行緒數量理想的情況下,a1模型的載入過程可以表示為:下載a1.model、a1.visual、flash.fx、a1.primitives、skin.bmp→載入檔案。進一步考慮到客戶端本地檔案的載入及解析速度非常快使得本地檔案的載入和解析所花費的時間可以忽略不計,則a1模型載入時主要的載入延時是由檔案下載造成。假設每一次檔案下載需要花費的時間為100毫秒,由於其客戶端僅下載當前發起訪問的當前資源,其共需要經過三次下載(實際上總的耗時時間與資源樹的層數有關),其a1模型的載入過程需要耗時300毫秒;對於該實施例來說,其客戶端在發起對當前資源訪問時可以下載預測資源,其共需要經過一次並行下載,其a1模型的載入過程需要耗時100毫秒。由此可見,該實施例可以縮短資源載入過程的時延。
需要說明的是,該實施例中用於下載預測資源的第一執行緒是從可用於下載該預測資源的未占用執行緒中分配出來的。由於通常用戶在使用網路套用時,客戶端載入資源的情況比較複雜,資源間依賴關係也比較複雜,而網路頻寬往往是一定的,所以,因此,在該實施例的一些實施方式中,在客戶端對當前資源發起訪問時下載預測資源的基礎上,還可以考慮需要下載的當前資源數量、預測資源數量、網路頻寬的可用執行緒數量以及用戶在網路遊戲中的需求之間的關係,來確定用於下載預測資源的第一執行緒的分配方式。
在該實施例的一些實施方式中,考慮到客戶端可能同時具有多個預測資源需要下載,而資源下載任務可以被認為是一種阻塞型任務,有時由於在先產生的資源下載任務占用了大量執行緒,使得可用於下載預測資源的未占用執行緒數量並不能滿足在後產生的所有預測資源的下載任務需求,為此,可以建立一個僅用於存儲未完成的預測資源下載任務的第一任務集合。在客戶端載入資源的過程中,可以將所有預測資源的下載任務都加入該第一任務集合,然後利用可用於下載預測資源的未占用執行緒為該第一任務集合中的下載任務分配執行緒,分得執行緒的下載任務可以從該第一任務集合中取出,並利用分得的執行緒完成對該下載任務的預測資源的下載。具體地,步驟203例如可以包括:將下載所述預測資源的第一下載任務加入到第一任務集合中;回響於所述第一下載任務分得所述第一執行緒,從所述第一任務集合中取出所述第一下載任務,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。其中,第一任務集合例如可以是一個任務佇列。可以理解的是,通過將所有預測資源的下載任務加入第一任務集合,可以實現對預測資源下載任務的執行緒分配進行管理,從而避免可用於下載預測資源的未占用執行緒數量不夠對預測資源的下載造成影響。
進一步而言,考慮到同一時刻需要下載的多個預測資源在接下來將要被載入的可能性並不相同(依賴關係越遠則其在接下來將要被載入的可能性越小),有些在某一時刻加入到第一任務集合的預測資源下載任務,在其下一時刻還未分配到執行緒,客戶端可能就暫時不需要訪問該預測資源了,但此時第一任務集合又加入了新的預測資源下載任務,新加入下載任務的預測資源則是客戶端接下來將要訪問的。例如,在網路遊戲的客戶端運行過程中,用戶的玩家角色快速通過第一區域,如果第一區域還未載入完畢玩家角色就已經移動到了第二區域,由於客戶端此時需要載入的是第二區域的場景而暫時不需要再載入第一區域的場景,因此,相對於基於第一區域未分得執行緒的預測資源,客戶端此時需要下載的是基於第二區域的預測資源。由此可見,相對於在先產生的預測資源的下載任務,在後產生的預測資源的下載任務是客戶端更急需執行的,因此,在前述預測資源下載任務加入第一任務集合進行處理的基礎上,還可以按照各個下載任務加入第一任務集合的時間由後到先的順序為所述第一任務集合中的各個下載任務分配執行緒。具體地,步驟203例如可以包括:將下載所述預測資源的第一下載任務加入到第一任務集合中;按照第一任務集合的分配順序,從可用於下載所述預測資源的未占用執行緒中為所述第一任務集合中的各個下載任務分配執行緒;回響於所述第一下載任務分得所述第一執行緒,從所述第一任務集合中取出所述第一下載任務,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。其中,所述第一任務集合的分配順序為第一任務集合中的各個下載任務按照各自加入第一任務集合的時間由後到先排列所形成的順序。此時,對於一個第一下載任務來說,在該第一下載任務為最後一個加入所述第一任務集合的下載任務且當前存在可用於下載預測資源的未占用執行緒的情況下,該第一下載任務可以分得所述第一執行緒。也就是說,該第一任何集合的任務佇列中的任務是後進先出(LIFO)的。
在該實施例的另一些實施方式中,考慮到有時客戶端在為所有當前資源和所有預測資源分配了執行緒之後,還具有未占用執行緒,為了避免這一部分未占用執行緒的浪費,並且也為了更快地將完整客戶端下載完畢,還可以回響於所述預測資源已分得第一執行緒且還存在可用於下載隨機資源的未占用執行緒,隨機選取所述客戶端本地不存在的資源作為隨機資源,並利用所述可用於下載隨機資源的未占用執行緒下載所述隨機資源。
在該實施例的又一些實施方式中,考慮到客戶端可能同時在執行多個資源載入過程(如網路遊戲的客戶端在同時載入多個模型或實體),當網路頻寬所提供的所有執行緒並不足以保證所有當前資源和所有預測資源都能夠同時分得執行緒時,由於當前資源是客戶端當前發起訪問所請求的資源,是相對於預測資源來說客戶端更急需的資源,因此,還可以優先為當前資源的下載任務分配執行緒,而預測資源可以是在當前資源分配執行緒之後再分配執行緒。對於這類實施方式,《一種資源下載的方法和設備》將在後續實施例中介紹,在此不再贅述。
可以理解的是,考慮到有時在先分配的預測資源和隨機資源可能會占用所有的執行緒,這會使得在後分配的當前資源難以及時獲得執行緒來下載,從而造成當前資源載入的延時。為了避免為當前資源分配執行緒時因執行緒耗盡而產生延時,可以將可用於下載資源的執行緒分成兩部分,一部分執行緒僅用於下載當前資源,另一部分執行緒由當前資源下載、預測資源下載和隨機資源下載共用。具體地,所述客戶端可用於下載資源的執行緒例如可以包括通用執行緒和專用執行緒,所述通用執行緒可用於下載所述當前資源、所述預測資源和所述隨機資源,所述專用執行緒僅可用於下載所述當前資源。
通過該實施例的技術方案,由於與當前資源具有依賴關係的預測資源通常是當前資源訪問之後就要訪問的資源,一方面使得當前資源訪問之後需要訪問且本地不存在的預測資源可以預先地在客戶端發起對當前資源的訪問請求時下載,而無需等到訪問並解析當前資源之後客戶端發起對預測資源的訪問請求時再去下載,從而顯著地減少了資源載入過程中客戶端發起訪問請求時需要下載資源的次數,加快了客戶端資源首次載入的速度,並縮短了資源載入過程的載入延時,另一方面使得請求訪問時當前資源未占用的執行緒可以被用來下載預測資源,從而避免了下載執行緒的浪費。
在客戶端載入資源的過程中,往往當前資源與預測資源在客戶端本地都不存在,這就使得在同一時刻客戶端既需要下載當前資源也需要下載預測資源。如果此時網路頻寬提供的執行緒不足以分配給所有的當前資源和預測資源,為了保證客戶端能夠儘快載入其當前發起訪問請求的當前資源,可以使當前資源在預測資源之前分配執行緒。
具體地,參見圖4,示出了《一種資源下載的方法和設備》中資源下載的方法另一實施例的流程圖,例如可以包括如下步驟:
步驟401、截獲對當前資源的訪問請求。
步驟402、通過資源關係索引檔案,查找與所述當前資源具有依賴關係且所述客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的。
步驟403、回響於所述客戶端本地不存在所述當前資源,從可用於下載所述當前資源的未占用執行緒中分配出第二執行緒,並利用所述第二執行緒下載所述當前資源到所述客戶端本地。
其中,當前資源的下載可以不受其預測資源查找過程的影響。例如,在步驟401執行之後,可以無需等到步驟402查找出預測資源,而直接在客戶端本地查找當前資源,如果能夠查找到則在客戶端本地讀取當前資源,如果不能查找到則執行步驟403而實現當前資源的下載,也即,步驟403針對當前資源下載的執行可以與步驟402針對預測資源查找的執行同步進行。
需要說明的是,在該實施例的一些實施方式中,考慮到客戶端可能同時具有多個模型需要載入,即客戶端可能同時截獲多個訪問請求,使得其需要同時下載多個當前資源,而資源下載任務可以被認為是一種阻塞型任務,有時由於在先產生的資源下載任務占用了大量執行緒,使得可用於下載當前資源的未占用執行緒數量並不能滿足在後產生的所有當前資源的下載任務需求,為此,可以建立一個僅用於存儲未完成的當前資源下載任務的第二任務集合。在客戶端載入資源的過程中,可以將所有當前資源的下載任務都加入該第二任務集合,然後利用可用於下載當前資源的未占用執行緒為該第二任務集合中的下載任務分配執行緒,分得執行緒的下載任務可以從該第二任務集合中取出,並利用分得的執行緒完成對該下載任務的當前資源的下載。具體地,步驟403例如可以包括:回響於所述客戶端本地不存在所述當前資源,將下載所述當前資源的第二下載任務加入到第二任務集合中;回響於所述第二下載任務分得所述第二執行緒,從所述第二任務集合中取出所述第二下載任務,並利用所述第二執行緒下載所述當前資源到所述客戶端本地。其中,第二任務集合例如可以是一個任務佇列。可以理解的是,通過將所有當前資源的下載任務加入第二任務集合,可以實現對當前資源下載任務的執行緒分配進行管理,從而避免可用於下載當前資源的未占用執行緒數量不夠對當前資源的下載造成影響。
進一步而言,考慮到當前資源是在客戶端發起訪問的資源,而客戶端對於當前資源的載入順序即是其發起訪問的順序,相對於在後產生的當前資源的下載任務,在先產生的當前資源的下載任務是客戶端更急需執行的,因此,在前述當前資源下載任務加入第二任務集合進行處理的基礎上,還可以按照各個下載任務加入第二任務集合的時間由先到後的順序為所述第二任務集合中的各個下載任務分配執行緒。具體地,步驟403例如可以包括:回響於所述客戶端本地不存在所述當前資源,將下載所述當前資源的第二下載任務加入到第二任務集合中;按照第二任務集合的分配順序,從可用於下載所述當前資源的未占用執行緒中為所述第二任務集合中的各個下載任務分配執行緒;回響於所述第二下載任務分得所述第二執行緒,從所述第二任務集合中取出所述第二下載任務,並利用所述第二執行緒下載所述當前資源到所述客戶端本地。其中,所述第二任務集合的分配順序為第二任務集合中的各個下載任務按照各自加入第二任務集合的時間由先到後排列所形成的順序。此時,對於一個第二下載任務來說,在該第二下載任務為最先一個加入所述第二任務集合的下載任務且當前存在可用於下載當前資源的未占用執行緒的情況下,該第二下載任務可以分得所述第二執行緒。也就是說,該第二任務集合的任務佇列中的任務是先進先出(FIFO)的。
步驟404、回響於所述當前資源已分得第二執行緒且還存在可用於下載所述預測資源的未占用執行緒,從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
可以理解的是,由於當前資源是客戶端發起訪問而需要載入的資源,而預測資源僅是預測出客戶端可能接下來會發起訪問的資源,所以,相對於預測資源,當前資源是客戶端更為急需的資源。因此,為了實現當前資源相對於預測資源的優先下載,可以先執行步驟403來分配用於下載當前資源的第二執行緒,而在所有當前資源都分配了執行緒、不再有當前資源未分得執行緒的情況下,如果還存在可用於下載預測資源的未占用執行緒,則可以執行步驟404來分配用於下載預測資源的第一執行緒。
在該實施例的一些實施方式中,基於前述第一任務集合和第二任務集合的實施方式,下載任務加入任務集合的過程與下載任務取出任務集合的過程可以是分開進行的。例如,在客戶端發起訪問請求時,如果基於該訪問請求的當前資源和預測資源都不在客戶端本地,則可以同時將當前資源的下載任務加入到第二任務集合而將預測資源的下載任務加入到第一任務集合,從而完成任務集合中下載任務的添加;而在具有可用於下載當前資源的未占用執行緒時,可以先為第二任務集合中的當前資源的下載任務分配執行緒,並從第二任務集合中取出分得執行緒的下載任務。當第二任務集合中不具有任何下載任務且還存在可用於下載預測資源的未占用執行緒時,可以再為第一任務集合中的預測資源的下載任務分配執行緒,並從第一任務集合中取出分得執行緒的下載任務。更進一步地,當第一任務集合和第二任務集合中都不具有任何下載任務且還存在可用於下載隨機資源的未占用執行緒時,還可以再隨機選擇一個客戶端本地不存在的資源作為隨機資源,並為隨機資源的下載任務分配執行緒。
可以理解的是,預測資源的下載任務在加入第一任務集合之後,往往需要經過一定的時間才能分得執行緒,有時在這段時間內客戶端會發起對該預測資源的訪問請求,此時該預測資源就將作為當前資源,其下載任務也會加入第二任務集合,這就造成了第一任務集合和第二任務集合具有同一資源的下載任務。由於第二任務集合優先於第一任務集合分配執行緒,所以同一資源在兩個任務集合的下載任務往往是第二任務集合先執行,此時,當其在第二任務集合的下載任務分得執行緒之後,其在第一任務集合的下載任務可以不再分配執行緒也不再執行。
此外,為了避免在先產生的預測資源和隨機資源的下載任務占用執行緒而導致在後產生的當前資源的下載任務無法及時執行,可以令一部分執行緒僅分配給當前資源的下載任務,這部分執行緒即使在沒有當前資源的下載任務需要分配的情況下也不會被分配給預測資源和隨機資源的下載任務,從而保證後續產生當前資源的下載任務的能夠及時得到執行緒。也就是說,如前所述,所述客戶端可用於下載資源的執行緒例如可以包括通用執行緒和專用執行緒,所述通用執行緒可用於下載所述當前資源、所述預測資源和所述隨機資源,所述專用執行緒僅可用於下載所述當前資源。
通過該實施例的技術方案,在預先下載客戶端在訪問當前資源之後接下來可能會訪問的預測資源的基礎上,可以使得客戶端發起訪問的當前資源的下載優先於客戶端可能會訪問的預測資源,從而保證了客戶端能夠及時載入其當前發起訪問請求的當前資源,避免了同時下載當前資源與預測資源的情況下預測資源搶占當前資源的下載執行緒而導致的客戶端載入時延增長。
為了使本領域技術人員更清楚地理解《一種資源下載的方法和設備》用於資源下載的方法實施方式,下面以一個具體的套用場景進行示例性方法的介紹。在該套用場景中,如圖5所示,對於客戶端發起訪問的當前資源,其下載任務會被加入高優先權佇列(即前述第二任務集合的一種示例);對於查找出的預測資源,其下載任務會被加入低優先權佇列(即前述第一任務集合的一種示例);在高、低優先權佇列都無下載任務時,可以利用未占用執行緒下載隨機資源。其中,高優先權佇列採用FIFO,低優先權佇列採用LIFO;執行緒池中的執行緒分為通用執行緒和專用執行緒,專用執行緒僅用於下載當前資源,通用執行緒用於下載當前資源、預測資源和隨機資源。
具體地,參見圖6,示出了《一種資源下載的方法和設備》中資源下載的方法又一實施例的流程圖。在該實施例中,例如可以包括如下步驟:
步驟601、截獲對當前資源的訪問請求。
步驟602、通過資源關係索引檔案,查找與當前資源具有依賴關係且客戶端本地不存在的資源作為預測資源。
步驟603、回響於客戶端本地不存在當前資源,將當前資源的下載任務加入高優先權佇列。
可以理解的是,當客戶端本地存在當前資源時,則客戶端可以直接從本地讀取當前資源並載入,而無需再將當前資源的下載任務加入高優先權佇列。
步驟604、將預測資源的下載任務加入低優先權佇列。
可以理解的是,步驟601~604是針對一個訪問請求的下載任務添加過程。在客戶端實際運行過程中,針對每一個訪問請求,客戶端都可以執行一次步驟601~604。此外,如果客戶端同時發起了多個訪問請求,那么其也可以同時針對多個訪問請求分別執行一次步驟601~604。
步驟605、識別高優先權佇列和低優先權佇列中的下載任務以及執行緒池中未占用的通用執行緒和專用執行緒。
需要說明的是,在步驟605執行完成之後,可以根據識別出的情況來選擇進入執行步驟606、步驟607或步驟608。具體地,當高優先權佇列中具有下載任務且執行緒池中具有未占用的執行緒時,可以進入執行步驟606;當高優先權佇列中不具有下載任務、低優先權佇列中具有下載任務且執行緒池中具有未占用的通用執行緒時,可以進入執行步驟607;當高、低優先權佇列中都不具有下載任務且執行緒池中具有未占用的通用執行緒,可以進入步驟608。
步驟606、回響於高優先權佇列中具有下載任務且執行緒池中具有未占用的執行緒,從高優先權佇列中取出最先一個加入的下載任務,為該下載任務分配執行緒並執行該下載任務。
其中,執行緒池中未占用的執行緒無論是通用執行緒還是專用執行緒,都可以用於分配給高優先權佇列中的下載任務。可以理解的是,在下載任務完成之後,可以釋放其所占用的執行緒,並將其下載所得的當前資源加入結果佇列,以便於當前資源保存到客戶端本地的相應存儲位置。
步驟607、回響於高優先權佇列中不具有下載任務、低優先權佇列中具有下載任務且執行緒池中具有未占用的通用執行緒,從低優先權佇列中取出最近加入的下載任務,為該下載任務分配執行緒並執行該下載任務。
其中,只有執行緒池中未占用的通用執行緒可以用於分配給低優先權佇列中的下載任務。如果執行緒池中未占用執行緒僅有專用執行緒,則此時低優先權佇列中的下載任務不能分得執行緒。可以理解的是,在下載任務完成之後,可以釋放其所占用的執行緒,並將其下載所得的預測資源加入結果佇列,以便於預測資源保存到客戶端本地的相應存儲位置。
步驟608、回響於高、低優先權佇列中都不具有下載任務且執行緒池中具有未占用的通用執行緒,隨機選取一個資源作為隨機資源,為該隨機資源的下載任務分配執行緒並執行該下載任務。
其中,只有執行緒池中未占用的通用執行緒可以用於分配給隨機資源的下載任務。如果執行緒池中未占用執行緒僅有專用執行緒,則此時隨機資源的下載任務不能分得執行緒。此外,隨機選擇的隨機資源,例如可以是在客戶端最後一次讀取的資源包中包括的客戶端本地還沒有的資源中隨機選取的。
可以理解的是,在下載任務完成之後,可以釋放其所占用的執行緒,並將其下載所得的隨機資源加入結果佇列,以便於隨機資源保存到客戶端本地的相應存儲位置。
需要說明的是,步驟605~608是下載任務的執行緒分配及執行過程,隨著高、低優先權佇列中下載任務的情況以及執行緒池中執行緒的占用與釋放情況不斷變化,在客戶端運行過程中需要不斷地執行步驟605~608,直至完整的客戶端下載完畢。
在該實施例中,步驟601~604執行的下載任務添加過程,步驟605~608執行的下載任務執行緒分配及執行過程,由於佇列的引入,使得這兩個過程在執行上可以是相互獨立的。因此,步驟605可以不需要在步驟604執行完成時再去執行,而是可以在客戶端運行過程中不斷地執行。
通過該實施例的技術方案,可以實現利用未占用執行緒預先下載客戶端在訪問當前資源之後接下來可能會訪問的預測資源,這一方面縮短了資源載入過程的載入延時,另一方面使得請求訪問當前資源時未占用的執行緒可以被用來下載預測資源,從而避免了下載執行緒的浪費。在此基礎上,還可以實現按照客戶端對資源需求的緊急程度優先下載客戶端急需的資源,從而避免非急需資源搶占急需資源的執行緒而導致客戶端載入部分資源的延時增加的問題。
可以理解的是,許多網路套用會通過補丁的方式對其客戶端進行程式與資源的更新。為了節省客戶端的下載量,補丁檔案中一般僅記錄兩個版本客戶端之間差別的補丁數據。但對於採用微端技術的客戶端來說,由於客戶端在一段時間內是不完整的,因此,在客戶端不完整的情況下,客戶端往往還未下載補丁檔案中的部分補丁數據所要修改的原始數據。為了使不完整的客戶端能夠適應原有補丁機制而無需對原有補丁機制進行改造,可以使不完整的客戶端記錄下補丁檔案所要修改的客戶端本地中未下載的原始數據,而等到客戶端本地下載該原始數據之後再依據預先記錄來套用補丁檔案。
具體地,參見圖7,示出了《一種資源下載的方法和設備》中資源下載的方法再一實施例的流程圖。在該實施例中,例如可以包括如下步驟:
步驟701、下載所述客戶端的補丁檔案。
通常一個補丁檔案中具有多個補丁數據,分別是用於對原有客戶端做不同方式的更新。例如,有些補丁數據是用於修改(如可以包括替換或刪除)原有客戶端中的原始數據,有些補丁數據是用於在原有客戶端基礎上增加一段新數據。
步驟702、以所述補丁檔案中所要修改的原始資源不存在於所述客戶端本地的補丁數據作為待補丁數據,記錄所述待補丁數據所要修改的原始資源。
具體地,客戶端可以基於數據段對補丁檔案所要更新的原始資源進行分析,選取其中客戶端本地不存在且補丁檔案要修改的原始資源,通過該原始資源所在位置的檔案名稱、偏移和長度來記錄該原始資源。當然,同時,還需要記錄補丁檔案中用於修改該原始資源的補丁數據,作為待補丁數據。
可以理解的是,有時對於某一客戶端未下載的原始資源,在客戶端已多次接收到對其進行修改的補丁檔案,從而客戶端就記錄了多個要對該原始資源進行修改的待補丁數據。此時,在一些實施方式中,可以將同一原始資源的待補丁數據合併,再在客戶端下載該原始資源之後,套用合併後的待補丁數據。其中,合併後的待補丁數據各個數據段保留的均是該數據段上最後接收到的補丁檔案中的補丁數據。例如,參見圖8所示的示例中,“Patch1”中的部分為在先接收到的一個補丁檔案對某段原始資源的待補丁數據,“Patch2”中的部分為在後接收到的一個補丁檔案對同一段原始檔案的待補丁數據,合併後的待補丁數據則如“Patch合併”所示。
步驟703、回響於所述待補丁數據所要修改的原始資源下載到所述客戶端本地,對所述客戶端套用所述待補丁數據。
具體地,可以先依據預先記錄的原始資源所在位置的檔案名稱、偏移和長度確定客戶端已下載待補丁數據所要修改的原始資源,然後再對客戶端套用該待補丁數據,使得原始資源被待補丁資源所修改。
需要說明的是,在補丁檔案中,有些補丁數據是客戶端可以在接收到補丁檔案時直接套用的。在接收到補丁檔案時,通過基於數據段對補丁檔案所要更新的原始資源進行分析,例如在該實施例的一些實施方式中,還可以以所述補丁檔案中所要修改的原始資源存在於所述客戶端本地的補丁數據作為第一即時補丁數據,對所述客戶端套用所述第一即時補丁數據。又如在該實施例的另一些實施方式中,還可以以所述補丁檔案中用於為所述客戶端增加資源的補丁數據作為第二即時補丁數據,對所述客戶端套用所述第二即時補丁數據。再如在該實施例的又一些實施方式中,還可以以所述補丁檔案中長度超過一個區塊的補丁數據為第三即時補丁數據,對所述客戶端套用所述第三即時補丁數據。
另外,可以理解的是,該實施例中客戶端對於補丁檔案的套用方式,可以結合在前述任意一種客戶端資源下載的實施方式上,《一種資源下載的方法和設備》對此不做限定。
通過該實施例的技術方案,相對於檔案或檔案塊整體替換的補丁方式,既不存在補丁檔案過大而導致的補丁下載量過大問題,也不存在原始檔案或檔案塊需要整體下載好而導致的準備補丁時間過長問題,甚至也無需對並非按照檔案或檔案塊整體替換的原有補丁機制進行改造,使得採用微端技術的客戶端具有及時且改造較小的補丁方式。
示例性設備
在介紹了《一種資源下載的方法和設備》示例性實施方式的方法之後,接下來,參考圖9~13對《一種資源下載的方法和設備》示例性實施方式的、用於資源下載的設備進行介紹。
參見圖9,示出了《一種資源下載的方法和設備》中資源下載的設備一實施例的結構圖。在該實施例中,所述設備例如具體可以包括:
訪問截獲模組901,用於截獲對當前資源的訪問請求;
預測資源查找模組902,用於通過資源關係索引檔案,查找與所述當前資源具有依賴關係且所述客戶端本地不存在的資源作為預測資源,其中所述資源關係索引檔案為預先依據網路套用的完整客戶端中各個資源之間依賴關係而生成的;
第一下載模組903,用於從可用於下載所述預測資源的未占用執行緒中分配出第一執行緒,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
其中,可選的,在該實施例的一些實施方式中,所述第一下載模組例如可以具體包括:
第一集合加入子模組,用於將下載所述預測資源的第一下載任務加入到第一任務集合中;
第一集合取出子模組,用於回響於所述第一下載任務分得所述第一執行緒,從所述第一任務集合中取出所述第一下載任務,並利用所述第一執行緒下載所述預測資源到所述客戶端本地。
其中,進一步可選的,在《一種資源下載的方法和設備》的另一些實施方式中,可以按照各個下載任務加入第一任務集合的時間由後到先的順序為所述第一任務集合中的各個下載任務分配執行緒。
參見圖10,示出了《一種資源下載的方法和設備》中資源下載的設備另一實施例的結構圖。在該實施例中,除了圖9所示的所有結構外,所述設備例如具體還可以包括:
第二下載模組1001,用於回響於所述客戶端本地不存在所述當前資源,從可用於下載所述當前資源的未占用執行緒中分配出第二執行緒,並利用所述第二執行緒下載所述當前資源到所述客戶端本地;
第一觸發模組1002,用於回響於所述當前資源已分得第二執行緒且還存在可用於下載所述預測資源的未占用執行緒,觸發所述第一下載模組903。
其中,可選的,在該實施例的一些實施方式中,所述第二下載模組例如具體可以包括:
第二集合加入子模組,用於回響於所述客戶端本地不存在所述當前資源,將下載所述當前資源的第二下載任務加入到第二任務集合中;
第二集合取出子模組,用於回響於所述第二下載任務分得所述第二執行緒,從所述第二任務集合中取出所述第二下載任務,並利用所述第二執行緒下載所述當前資源到所述客戶端本地。
其中,進一步可選的,在該實施例的另一些實施方式中,可以按照各個下載任務加入第二任務集合的時間由先到後的順序為所述第二任務集合中的各個下載任務分配執行緒。
參見圖11,示出了《一種資源下載的方法和設備》中資源下載的設備又一實施例的結構圖。在該實施例中,除了圖9所示的所有結構外,所述設備例如具體還可以包括:
第三下載模組1101,用於回響於所述預測資源已分得第一執行緒且還存在可用於下載隨機資源的未占用執行緒,隨機選取所述客戶端本地不存在的資源作為隨機資源,並利用所述可用於隨機資源的未占用執行緒下載所述隨機資源。
其中,在《一種資源下載的方法和設備》設備實施例的一些實施方式中,所述客戶端可用於下載資源的執行緒可以包括通用執行緒和專用執行緒,所述通用執行緒可用於下載所述當前資源、所述預測資源和所述隨機資源,所述專用執行緒僅可用於下載所述當前資源。
參見圖12,示出了《一種資源下載的方法和設備》中資源下載的設備再一實施例的結構圖。在該實施例中,除了圖9所示的所有結構外,所述設備例如具體還可以包括:
補丁下載模組1201,用於下載所述客戶端的補丁檔案;
補丁記錄模組1202,用於以所述補丁檔案中所要修改的原始資源不存在於所述客戶端本地的補丁數據作為待補丁數據,記錄所述待補丁數據所要修改的原始資源;
第一補丁套用模組1203,用於回響於所述待補丁數據所要修改的原始資源下載到所述客戶端本地,對所述客戶端套用所述待補丁數據。
參見圖13,示出了《一種資源下載的方法和設備》中資源下載的設備又再一實施例的結構圖。在該實施例中,除了圖12所示的所有結構外,所述設備例如具體還可以包括:
第二補丁套用模組1301,用於以所述補丁檔案中所要修改的原始資源存在於所述客戶端本地的補丁資源作為第一即時補丁數據,對所述客戶端套用所述第一即時補丁數據;
第三補丁套用模組1302,用於以所述補丁檔案中用於為所述客戶端增加資源的補丁數據作為第二即時補丁數據,對所述客戶端套用所述第二即時補丁數據;
第四補丁套用模組1303,用於以所述補丁檔案中長度超過一個區塊的補丁數據為第三即時補丁數據,對所述客戶端套用所述第三即時補丁數據。
通過《一種資源下載的方法和設備》示例性的設備實施例,由於與當前資源具有依賴關係的預測資源通常是當前資源訪問之後就要訪問的資源,一方面使得當前資源訪問之後需要訪問且本地不存在的預測資源可以預先地在客戶端發起對當前資源的訪問請求時下載,而無需等到訪問並解析當前資源之後客戶端發起對預測資源的訪問請求時再去下載,從而顯著地減少了資源載入過程中客戶端發起訪問請求時需要下載資源的次數,加快了客戶端資源首次載入的速度,並縮短了資源載入過程的載入延時,另一方面使得請求訪問當前資源時未占用的執行緒可以被用來下載預測資源,從而避免了下載執行緒的浪費。
進一步地,在《一種資源下載的方法和設備》設備實施例的一些實施方式中,相對於檔案或檔案塊整體替換的補丁方式,既不存在補丁檔案過大而導致的補丁下載量過大問題,也不存在原始檔案或檔案塊需要整體下載好而導致的準備補丁時間過長問題,甚至也無需對並非按照檔案或檔案塊整體替換的原有補丁機制進行改造,使得採用微端技術的客戶端具有及時且改造較小的補丁方式。
應當注意,儘管在上文詳細描述中提及了用於資源下載的設備的若干裝置或子裝置,但是這種劃分僅僅是示例性的而並非是強制性的。實際上,根據《一種資源下載的方法和設備》的實施方式,上文描述的兩個或更多模組的特徵和功能可以在一個模組中具體化。反之,上文描述的一個模組的特徵和功能可以進一步劃分為由多個模組來具體化。
此外,儘管在附圖中以特定順序描述了《一種資源下載的方法和設備》方法的操作,但是,這並非要求或者暗示必須按照該特定順序來執行這些操作,或是必須執行全部所示的操作才能實現期望的結果。附加地或備選地,可以省略某些步驟,將多個步驟合併為一個步驟執行,和/或將一個步驟分解為多個步驟執行。
榮譽表彰
2018年12月20日,《一種資源下載的方法和設備》獲得第二十屆中國專利優秀獎。