專利名稱:一種文件下載方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種文件下載方法和裝置。
背景技術(shù):
目前,服務(wù)器處理業(yè)務(wù)請(qǐng)求的方式包括同步的處理方式和異步的處理方式。在同步處理方式下,調(diào)用者向服務(wù)器發(fā)起業(yè)務(wù)請(qǐng)求后,需要等待服務(wù)器的處理結(jié)果,然后調(diào)用者根據(jù)該處理結(jié)果繼續(xù)后面的步驟。在異步處理方式下,調(diào)用者向服務(wù)器發(fā)起業(yè)務(wù)請(qǐng)求后,不需要等待服務(wù)器的處理結(jié)果,在服務(wù)器完成針對(duì)該請(qǐng)求的處理后,向該調(diào)用者發(fā)起通知,然后調(diào)用者再根據(jù)該通知執(zhí)行該業(yè)務(wù)請(qǐng)求對(duì)應(yīng)的后續(xù)步驟。多任務(wù)的服務(wù)器一般采用如下兩種方式提高效率其一,在同步處理方式下采用多線程的方式,其實(shí)現(xiàn)相對(duì)簡(jiǎn)單。其二,采用異步處理方式。由于在異步處理方式下,調(diào)用者在發(fā)起一項(xiàng)業(yè)務(wù)請(qǐng)求之后、且收到該項(xiàng)業(yè)務(wù)請(qǐng)求處理完畢的通知之前,該調(diào)用者還可以發(fā)起其他項(xiàng)業(yè)務(wù)請(qǐng)求,因而一般情況下,異步處理方式具有更高的效率。由于在異步處理方式下,一項(xiàng)業(yè)務(wù)的各個(gè)處理步驟被分開,因此中間數(shù)據(jù)需要保存下來(lái),以便后續(xù)步驟的進(jìn)行,且業(yè)務(wù)邏輯的描述以若干動(dòng)作響應(yīng)組成,因此引入狀態(tài)機(jī)以保存中間數(shù)據(jù)和描述業(yè)務(wù)邏輯。狀態(tài)機(jī)是一個(gè)有向圖形,由一組節(jié)點(diǎn)和一組相應(yīng)的轉(zhuǎn)移函數(shù)組成,一個(gè)狀態(tài)機(jī)對(duì)象對(duì)應(yīng)一個(gè)完整的客戶端的請(qǐng)求/響應(yīng)過(guò)程。一種典型的采用異步處理方式的多任務(wù)服務(wù)器是異步并發(fā)下載服務(wù)器,其結(jié)構(gòu)如圖1所示。圖1是異步并發(fā)下載服務(wù)器的模塊化結(jié)構(gòu)示意圖。如圖1所示,異步并發(fā)下載服務(wù)器包括前端網(wǎng)絡(luò)交互模塊、異步并發(fā)處理模塊和源數(shù)據(jù)讀取模塊。其中,前端網(wǎng)絡(luò)交互模塊,用于與客戶端進(jìn)行通信;異步并發(fā)處理模塊,是異步并發(fā)下載服務(wù)器的核心模塊,用于按照業(yè)務(wù)邏輯進(jìn)行業(yè)務(wù)處理;源數(shù)據(jù)讀取模塊,用于與異步并發(fā)下載服務(wù)器的后臺(tái)系統(tǒng)相連,并進(jìn)行相應(yīng)的業(yè)務(wù)處理。圖2是異步并發(fā)下載服務(wù)器的進(jìn)程結(jié)構(gòu)示意圖。如圖2所示,異步并發(fā)下載服務(wù)器中的包括三個(gè)進(jìn)程,分別為網(wǎng)絡(luò)接收器、核心處理進(jìn)程和網(wǎng)絡(luò)連接器。這三個(gè)進(jìn)程都采用異步處理方式,三個(gè)進(jìn)程之間通過(guò)專用的信息通道來(lái)傳遞信令和數(shù)據(jù)。其中,網(wǎng)絡(luò)接收器位于前端網(wǎng)絡(luò)交互模塊中,核心處理進(jìn)程位于異步并發(fā)處理模塊中,網(wǎng)絡(luò)連接器位于源數(shù)據(jù)讀取模塊中。網(wǎng)絡(luò)接收器,用于與客戶端進(jìn)行通信。具體地,網(wǎng)絡(luò)接收器監(jiān)聽(tīng)與客戶端相連的端口,接收客戶端的連接請(qǐng)求,將客戶端發(fā)來(lái)的數(shù)據(jù)轉(zhuǎn)發(fā)給核心處理進(jìn)程,將核心處理進(jìn)程回復(fù)的數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端,向核心處理進(jìn)程通知網(wǎng)絡(luò)變化事件,例如通知鏈接已關(guān)閉、數(shù)據(jù)發(fā)送完畢等事件。核心處理進(jìn)程是核心模塊,用于按照業(yè)務(wù)邏輯進(jìn)行業(yè)務(wù)處理,向網(wǎng)絡(luò)接收器回復(fù)
處理結(jié)果。網(wǎng)絡(luò)連接器,用于從后臺(tái)分布式系統(tǒng)拉取數(shù)據(jù)。具體地,網(wǎng)絡(luò)連接器接收核心處理進(jìn)程的請(qǐng)求,將該請(qǐng)求完整發(fā)送給相關(guān)服務(wù)器,接收相關(guān)服務(wù)器的回復(fù)并轉(zhuǎn)發(fā)給核心處理進(jìn)程,向核心處理進(jìn)程通知網(wǎng)絡(luò)變化事件,例如鏈接關(guān)閉、網(wǎng)絡(luò)異常等事件。圖3是核心處理進(jìn)程的狀態(tài)機(jī)示意圖。如圖3所示,核心處理進(jìn)程從當(dāng)前所述狀態(tài)機(jī)開始,按照?qǐng)D3所示主驅(qū)動(dòng)循環(huán)的箭頭順序依次經(jīng)歷其他狀態(tài)機(jī)。例如,如果核心處理進(jìn)程當(dāng)前所處狀態(tài)為收到鏈接/請(qǐng)求狀態(tài),則經(jīng)歷的狀態(tài)按順序?yàn)閯?chuàng)建狀態(tài)機(jī)對(duì)象并加入狀態(tài)機(jī)池、探測(cè)網(wǎng)絡(luò)事件并觸發(fā)相關(guān)狀態(tài)機(jī)、進(jìn)行其他相關(guān)調(diào)度、如果收到結(jié)束通知?jiǎng)t退出當(dāng)前處理進(jìn)程,如果超時(shí)則進(jìn)行超時(shí)處理。圖3所示狀態(tài)機(jī)的主驅(qū)動(dòng)循環(huán)的單輪時(shí)間為2-;3mS,其中,在收到當(dāng)前狀態(tài)機(jī)完成的通知后,直接進(jìn)入下一狀態(tài)機(jī)。圖4是異步并發(fā)下載服務(wù)器進(jìn)行文件下載的流程。如圖4所示,該流程包括步驟401,核心處理進(jìn)程監(jiān)測(cè)到接收器事件,該接收器事件為收到網(wǎng)絡(luò)接收器發(fā)來(lái)的文件下載請(qǐng)求,則核心處理進(jìn)程進(jìn)入收到請(qǐng)求進(jìn)行初始化的狀態(tài)。步驟402,核心處理進(jìn)程在初始化完畢后,進(jìn)入查詢文件信息的狀態(tài)。具體地,核心處理進(jìn)程向網(wǎng)絡(luò)連接器推送查詢文件請(qǐng)求。步驟403,核心處理進(jìn)程監(jiān)測(cè)到網(wǎng)絡(luò)連接器回復(fù)文件信息的事件,進(jìn)入得到文件信息的狀態(tài)。步驟404,核心處理進(jìn)程向網(wǎng)絡(luò)連接器推送下載文件分片的請(qǐng)求,進(jìn)入下載文件分片的狀態(tài)。步驟405,核心處理進(jìn)程監(jiān)測(cè)到網(wǎng)絡(luò)連接器回復(fù)分片數(shù)據(jù)的事件后,進(jìn)入得到分片數(shù)據(jù)的狀態(tài)。步驟406,核心處理進(jìn)程進(jìn)入回復(fù)客戶端分片數(shù)據(jù)的狀態(tài),通過(guò)網(wǎng)絡(luò)接收器向客戶端推送分片數(shù)據(jù)。步驟407,核心處理進(jìn)程監(jiān)測(cè)到網(wǎng)絡(luò)接收器回復(fù)已接收完畢的事件,判斷當(dāng)前正在下載的文件是否已下載完畢,如果是,則下載任務(wù)完成,如果否,則返回步驟404。由圖4可見(jiàn),網(wǎng)絡(luò)接收器事件和網(wǎng)絡(luò)連接器事件是驅(qū)動(dòng)核心處理進(jìn)程的狀態(tài)機(jī)運(yùn)行的唯一動(dòng)力來(lái)源,即當(dāng)核心處理進(jìn)程完成一個(gè)分片的數(shù)據(jù)下載后,會(huì)立即啟動(dòng)下一個(gè)分片的數(shù)據(jù)下載。在這種被動(dòng)的邏輯下,文件下載流量得不到任何控制。因此,對(duì)于采用異步處理方式的高并發(fā)文件下載服務(wù)器,如何對(duì)文件下載流量進(jìn)行控制是當(dāng)前亟需解決的技術(shù)問(wèn)題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種文件下載方法和裝置,以便對(duì)文件下載流量進(jìn)行控制。本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的一種文件下載方法,該方法包括服務(wù)器接收文件下載請(qǐng)求后,控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。一種文件下載裝置,該裝置包括接收模塊和下載模塊;所述接收模塊,用于接收文件下載請(qǐng)求;所述下載模塊,用于控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。由上述技術(shù)方案可見(jiàn),本發(fā)明提供的文件下載方法和裝置,通過(guò)在文件下載的過(guò)程中控制文件數(shù)據(jù)的下載頻率,來(lái)控制文件下載流量。在每次下載的文件數(shù)據(jù)量較為穩(wěn)定時(shí),文件數(shù)據(jù)的下載頻率越高,則文件下載流量越大,文件數(shù)據(jù)的下載頻率越低,則文件下載流量越小,因此,本發(fā)明通過(guò)控制文件數(shù)據(jù)下載頻率能夠解決文件下載流量控制的技術(shù)問(wèn)題。
圖1是異步并發(fā)下載服務(wù)器的模塊化結(jié)構(gòu)示意圖。圖2是異步并發(fā)下載服務(wù)器的進(jìn)程結(jié)構(gòu)示意圖。圖3是核心處理進(jìn)程的狀態(tài)機(jī)示意圖。圖4是異步并發(fā)下載服務(wù)器進(jìn)行文件下載的流程。圖5是本發(fā)明提供的文件下載方法流程圖。圖6是一個(gè)客戶端從服務(wù)器下載文件的方法流程圖。圖7是文件下載流量的水位關(guān)系示意圖。圖8是調(diào)度器中的等待隊(duì)列示意圖。圖9是本發(fā)明提供的又一文件下載流程圖。圖10是本發(fā)明提供的一種文件下載裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式本發(fā)明提供的文件下載方法和裝置,應(yīng)用于采用異步處理方式的服務(wù)器中,通過(guò)控制文件數(shù)據(jù)的下載頻率來(lái)控制文件下載流量。當(dāng)在服務(wù)器后臺(tái)采用分布式網(wǎng)絡(luò)架構(gòu)存儲(chǔ)需要下載的文件、且需要下載的文件較大而需要分片下載時(shí),可以利用調(diào)度器控制文件分片的下載頻率。當(dāng)在服務(wù)器本地存儲(chǔ)需要下載的文件時(shí),如果客戶端從該服務(wù)器下載文件,由于服務(wù)器每次讀取的數(shù)據(jù)塊的大小有限,一般不能一次讀取整個(gè)文件,也需要每次讀取文件的一個(gè)分片,因此服務(wù)器可以通過(guò)控制從本地讀取文件分片的讀取頻率來(lái)控制文件下載流量。圖5是本發(fā)明提供的文件下載方法流程圖。如圖5所示,該流程包括步驟501,服務(wù)器接收文件下載請(qǐng)求。步驟502,服務(wù)器在文件下載的過(guò)程中控制讀取文件數(shù)據(jù)的頻率。
步驟503,服務(wù)器將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。其中,可以利用調(diào)度器控制服務(wù)器讀取文件分片的頻率。具體地,當(dāng)在服務(wù)器后臺(tái)采用分布式網(wǎng)絡(luò)架構(gòu)存儲(chǔ)需要下載的文件時(shí),可以利用調(diào)度器控制從該服務(wù)器后臺(tái)的其他服務(wù)器下載文件分片的頻率;當(dāng)文件數(shù)據(jù)存儲(chǔ)在服務(wù)器本地時(shí),利用調(diào)度器控制從服務(wù)器本地讀取文件分片的頻率。所述利用調(diào)度器控制服務(wù)器讀取文件分片的頻率具體可以包括服務(wù)器根據(jù)文件下載流量,從當(dāng)前處于等待調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接,為該若干個(gè)鏈接讀取文件分片,其中,服務(wù)器將讀取的文件分片發(fā)給請(qǐng)求文件下載的客戶端后,如果該客戶端請(qǐng)求下載的文件未下載完畢,則該客戶端與服務(wù)器的鏈接進(jìn)入等待調(diào)度狀態(tài)。下面以在服務(wù)器后臺(tái)采用分布式網(wǎng)絡(luò)架構(gòu)存儲(chǔ)需要下載的文件為例,對(duì)客戶端從服務(wù)器下載文件的方法的詳細(xì)流程,以及調(diào)度器進(jìn)行調(diào)度的具體方法進(jìn)行介紹,具體請(qǐng)參見(jiàn)圖6至圖9。圖6至圖9的方法也適用于在服務(wù)器本地存儲(chǔ)文件數(shù)據(jù)時(shí)的文件下載過(guò)程。圖6是一個(gè)客戶端從服務(wù)器下載文件的方法流程圖。如圖6所示,該流程包括步驟601 步驟603,同步驟401 403。通過(guò)步驟601 步驟603,客戶端向服務(wù)器發(fā)起下載文件的請(qǐng)求,服務(wù)器根據(jù)該請(qǐng)求讀取相應(yīng)的文件信息。步驟604,所述客戶端與所述服務(wù)器的鏈接進(jìn)入等待調(diào)度狀態(tài)。步驟605,服務(wù)器監(jiān)測(cè)到調(diào)度器觸發(fā)該客戶端下載文件的調(diào)度器事件后,向網(wǎng)絡(luò)連接器推送從后臺(tái)下載下一個(gè)文件分片的請(qǐng)求。步驟606,服務(wù)器監(jiān)測(cè)到網(wǎng)絡(luò)連接器回復(fù)分片數(shù)據(jù)的連接器事件后,進(jìn)入得到分片數(shù)據(jù)的狀態(tài)。步驟607,服務(wù)器通過(guò)網(wǎng)絡(luò)接收器向客戶端回復(fù)分片數(shù)據(jù)。步驟608,服務(wù)器監(jiān)測(cè)到網(wǎng)絡(luò)接收器向客戶端回復(fù)完畢所述分片數(shù)據(jù)的接收器事件后,判斷該客戶端請(qǐng)求下載的文件是否已下載完畢,如果是,則下載任務(wù)完成,如果否,則返回步驟604。在圖6所示下載流程中,每當(dāng)服務(wù)器得到客戶端請(qǐng)求下載的文件信息或者客戶端下載完一個(gè)文件分片后,該客戶端與服務(wù)器的鏈接即進(jìn)入等待調(diào)度狀態(tài),對(duì)于并發(fā)下載的服務(wù)器,在同一時(shí)刻會(huì)有多個(gè)鏈接處于等待調(diào)度狀態(tài),服務(wù)器利用調(diào)度器對(duì)多個(gè)處于等待調(diào)度狀態(tài)的鏈接進(jìn)行調(diào)度,為被調(diào)度到的鏈接從后臺(tái)下載下一個(gè)文件分片,進(jìn)而將下載的下一個(gè)文件分片回復(fù)給相應(yīng)的客戶端,而其他沒(méi)有被調(diào)度到的鏈接則繼續(xù)處于等待調(diào)度狀態(tài)。其中,一個(gè)鏈接對(duì)應(yīng)一個(gè)狀態(tài)機(jī)對(duì)象,該狀態(tài)機(jī)保存該下載鏈接的運(yùn)行狀態(tài)和中間數(shù)據(jù)??梢?jiàn),本發(fā)明通過(guò)控制文件分片的下載頻率來(lái)解決文件下載流量控制的技術(shù)問(wèn)題,具體由調(diào)度器觸發(fā)服務(wù)器核心處理進(jìn)程的狀態(tài)機(jī)轉(zhuǎn)換,由于由調(diào)度器觸發(fā)核心處理進(jìn)程的狀態(tài)機(jī)轉(zhuǎn)換是屬于服務(wù)器自身的一種主動(dòng)觸發(fā),與現(xiàn)有技術(shù)中僅僅根據(jù)接收器事件或連接器事件來(lái)觸發(fā)核心處理進(jìn)程的狀態(tài)機(jī)轉(zhuǎn)換相比,能夠解決文件下載流量控制的技術(shù)問(wèn)題。
利用調(diào)度器從當(dāng)前處于等待調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接時(shí),涉及到兩個(gè)問(wèn)題,其一是調(diào)度出的鏈接個(gè)數(shù),其二是調(diào)度出哪些鏈接,下面對(duì)這兩個(gè)問(wèn)題分別予以說(shuō)明調(diào)度出的鏈接個(gè)數(shù)可以確定為服務(wù)器當(dāng)前能夠提供的文件下載流量的最大值除以最大文件分片的數(shù)據(jù)量大小。其中,可以預(yù)先確定最大文件分片的數(shù)據(jù)量大小,一般該數(shù)據(jù)量不宜太大,也不宜太小,太小導(dǎo)致讀取次數(shù)高而引發(fā)IO瓶頸,太大容易浪費(fèi)內(nèi)存且影響處理時(shí)間,如已經(jīng)實(shí)現(xiàn)范例從后臺(tái)服務(wù)器中的讀取的文件分片大小為U8KB。。下面采用一個(gè)形象的例子對(duì)調(diào)度器從當(dāng)前處于等待調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接的方法進(jìn)行介紹,具體請(qǐng)參見(jiàn)圖7及其說(shuō)明。圖7是文件下載流量的水位關(guān)系示意圖。圖7示出的是用于模擬調(diào)度器進(jìn)行文件下載流量控制的虛擬流量水缸,用以預(yù)測(cè)和計(jì)算文件下載流量的流逝以及需要調(diào)度出的鏈接個(gè)數(shù)。虛擬流量水缸中的水表示服務(wù)器能夠提供的文件下載流量,當(dāng)前水位與水平位之間的水差表示服務(wù)器當(dāng)前能夠提供的文件下載流量。在初始狀態(tài),即服務(wù)器提供下載的文件數(shù)據(jù)的起始時(shí)刻,當(dāng)前水位處于水平位上,隨著文件下載過(guò)程的進(jìn)行,當(dāng)前水位進(jìn)行相應(yīng)的變化。具體地,當(dāng)前水位的變化服從下面兩個(gè)規(guī)則規(guī)則一,服務(wù)器的當(dāng)前水位隨著時(shí)間均勻增長(zhǎng),增長(zhǎng)速度為允許的最大文件下載速度,例如,允許的最大文件下載速度為30MB/S,則當(dāng)前水位每秒鐘增加30MB。規(guī)則二,當(dāng)服務(wù)器向客戶端回復(fù)下載的數(shù)據(jù),即服務(wù)器有數(shù)據(jù)吐出時(shí),當(dāng)前水位下降相應(yīng)大小,例如,當(dāng)服務(wù)器向客戶端回復(fù)U8KB的數(shù)據(jù)時(shí),當(dāng)前水位下降U8KB。另外,為了避免水位無(wú)限制增長(zhǎng),設(shè)置有滿水位,當(dāng)前水位一般不得高出滿水位。采用規(guī)則一和規(guī)則二計(jì)算當(dāng)前水位的物理含義是根據(jù)服務(wù)器允許的最大文件下載速度,可以計(jì)算出一定時(shí)間內(nèi)服務(wù)器允許下載的最大文件流量,采用規(guī)則一計(jì)算出的當(dāng)前水位在一定時(shí)間內(nèi)增長(zhǎng)的數(shù)值即相當(dāng)于該最大文件流量;在該段時(shí)間內(nèi),服務(wù)器已經(jīng)向客戶端回復(fù)的文件數(shù)據(jù)量,相當(dāng)于已經(jīng)占用的文件流量,則服務(wù)器當(dāng)前能夠提供的文件流量應(yīng)該等于在該段時(shí)間內(nèi)能夠提供的最大文件流量減去已經(jīng)占用的文件流量,即相當(dāng)于規(guī)則二中在根據(jù)規(guī)則一計(jì)算出的當(dāng)前水位的基礎(chǔ)上下降已經(jīng)下載的數(shù)據(jù)量對(duì)應(yīng)的水量。參照?qǐng)D7,在調(diào)度操作中,由于當(dāng)前水位與水平水位之間的水差相當(dāng)于服務(wù)器當(dāng)前能夠提供的文件下載流量,因此可以根據(jù)所述水差計(jì)算需要調(diào)度出的鏈接個(gè)數(shù)。具體地,所述水差小于或者等于0,表示當(dāng)前已占用的文件下載流量已超過(guò)了該服務(wù)器能夠提供的最大文件下載流量或者服務(wù)器當(dāng)前能夠提供的文件下載流量已全部被占用,則調(diào)度出的鏈接個(gè)數(shù)為0,相當(dāng)于暫停調(diào)度。所述水差大于0時(shí),該水差的值表示服務(wù)器當(dāng)前能夠提供的最大文件下載流量, 則調(diào)度出的鏈接個(gè)數(shù)=水差/最大分片大小,其中,最大分片大小為固定值,例如可以為 U8KB,文件分片的數(shù)據(jù)量一般都等于該最大分片大小,不過(guò)文件尾部的最后一個(gè)文件分片的數(shù)據(jù)量一般小于該值。在調(diào)度器的每輪調(diào)度時(shí)都會(huì)計(jì)算當(dāng)前水位,進(jìn)而根據(jù)當(dāng)前水位與水平位之間的水差確定需要調(diào)度出的鏈接個(gè)數(shù)。所述鏈接個(gè)數(shù)的計(jì)算原理可以簡(jiǎn)述為由于一段時(shí)間內(nèi)總共的文件下載流量被限制在一個(gè)固定值內(nèi),則可以根據(jù)該段時(shí)間的前一部分已經(jīng)下載的數(shù)據(jù)量,確定該段時(shí)間的后一部分能夠提供的文件下載數(shù)據(jù)量,進(jìn)而控制文件下載流量。根據(jù)以上對(duì)圖7的描述,可以看出,當(dāng)前水位的變化有以下兩種情景情景一,當(dāng)服務(wù)器的下載壓力較小時(shí),當(dāng)前水位在滿水位附近上下抖動(dòng)。情景二,當(dāng)服務(wù)器的下載壓力較大時(shí),當(dāng)前水位在水平水位附近上下抖動(dòng)。由于調(diào)度器的調(diào)度周期一般越小,因此當(dāng)前水位上下抖動(dòng)的幅度一般也較小,即服務(wù)器的下載帶寬較為平滑。關(guān)于調(diào)度出哪些鏈接的問(wèn)題,在調(diào)度過(guò)程中,可以按照各個(gè)鏈接進(jìn)入調(diào)度狀態(tài)的由先到后的順序進(jìn)行調(diào)度,從而保證調(diào)度的公平性,避免某些鏈接由于一直沒(méi)有被調(diào)度而造成“餓死”的現(xiàn)象。具體地,可以在調(diào)度器重設(shè)置一個(gè)等待隊(duì)列,例如可以是雙端隊(duì)列或者鏈表,當(dāng)客戶端與服務(wù)器的鏈接進(jìn)入等待調(diào)度狀態(tài)時(shí),將該鏈接對(duì)應(yīng)的狀態(tài)機(jī)句柄或指針追加至等待隊(duì)列的尾部,在退出等待調(diào)度狀態(tài)時(shí),則不必從所述等待隊(duì)列中移除,而只需要將其狀態(tài)轉(zhuǎn)換為除等待調(diào)度狀態(tài)以外的狀態(tài),或者通過(guò)標(biāo)志位標(biāo)識(shí)是否處于等待調(diào)度狀態(tài)即可,將未處于等待調(diào)度狀態(tài)的從等待隊(duì)列中移除的操作可以在執(zhí)行調(diào)度動(dòng)作時(shí)再進(jìn)行。調(diào)度器在調(diào)度時(shí),從等待隊(duì)列中處于等待調(diào)度狀態(tài)的鏈接中,按照進(jìn)入隊(duì)列由頭到尾的順序(即進(jìn)入該隊(duì)列由先到后的順序)依次調(diào)度出各個(gè)鏈接,直到調(diào)度出的鏈接個(gè)數(shù)滿足等于根據(jù)所述水差計(jì)算出的鏈接個(gè)數(shù)或者所述隊(duì)列已被遍歷完畢為止。圖8是調(diào)度器中的等待隊(duì)列示意圖。如圖8所示的等待隊(duì)列,陰影部分的當(dāng)前狀態(tài)機(jī)不是等待調(diào)度狀態(tài),該狀態(tài)機(jī)不是有效的可觸發(fā)狀態(tài)機(jī),需要從等待隊(duì)列中移除。選取N個(gè)狀態(tài)機(jī)(即N個(gè)鏈接,其中N根據(jù)圖7的所述水差計(jì)算得到)的方法為 從等待隊(duì)列的頭部向尾部遍歷,如果是處于等待調(diào)度狀態(tài)的狀態(tài)機(jī),則選出,如果無(wú)效則移除,直到已經(jīng)選出的狀態(tài)機(jī)數(shù)量為N或者已遍歷完畢。本發(fā)明還提出了進(jìn)一步平滑文件下載流量的方法,具體請(qǐng)參見(jiàn)圖9。在服務(wù)器有大量鏈接,且總體流量有限制的情況下,每個(gè)鏈接不會(huì)有太高的速度。 由于服務(wù)器每次吐出的分片大小是固定的,而該大小相對(duì)客戶端來(lái)說(shuō)是比較大的,其結(jié)果是客戶端每個(gè)時(shí)間間隔得到一個(gè)大分片,帶寬上下波動(dòng)。假如一個(gè)限速250mbps的服務(wù)器,同時(shí)有1500個(gè)有效鏈接,那個(gè)每個(gè)鏈接的平均速度是21KB/S,即客戶端每6s收到一個(gè)128K的一個(gè)分片,則其帶寬波動(dòng)較大。圖9是本發(fā)明提供的又一文件下載流程圖。如圖9所示,該流程包括步驟901 904,同步驟601 604。步驟905,服務(wù)器監(jiān)測(cè)到調(diào)度器主動(dòng)觸發(fā)該客戶端下載文件的調(diào)度器事件后,判斷當(dāng)前即將下載的文件分片是否已存儲(chǔ)在服務(wù)器本地,如果是,則執(zhí)行步驟908,如果否,則執(zhí)行步驟906。步驟906 907,同步驟605 606。步驟908,向客戶端回復(fù)服務(wù)器從后臺(tái)下載的分片數(shù)據(jù)的一部分。步驟909,同步驟608。圖9所示方法可以概括為服務(wù)器每次向后臺(tái)下載一個(gè)較大的文件分片,然后存儲(chǔ)在服務(wù)器本地,當(dāng)服務(wù)器向客戶端回復(fù)數(shù)據(jù)時(shí),將從后臺(tái)下載的較大的文件分片打散成小分片,然后每次被調(diào)度時(shí)向客戶端回復(fù)一個(gè)小分片,從而能夠平滑文件下載流量。圖9所示方法首先由服務(wù)器從后臺(tái)拉取一個(gè)較大的文件分片,然后緩存起來(lái),之后再每次將該大的文件分片的一部分返回給客戶端,既可以避免服務(wù)器頻繁向后臺(tái)拉取文件數(shù)據(jù),又能夠平滑客戶端從服務(wù)器下載文件的流量。通過(guò)圖9所示的方法,可以平滑文件下載流量,而且可以避免文件下載影響用戶的網(wǎng)絡(luò)使用質(zhì)量。圖9所示方法的一個(gè)代價(jià)是需要一定的服務(wù)器內(nèi)存做為文件分片數(shù)據(jù)的緩存,針對(duì)一般配置的服務(wù)器,該代價(jià)完全可以接受。繼續(xù)上面250mbps的服務(wù)器同時(shí)有1500個(gè)有效鏈接的例子,采用圖9所示方法后,單個(gè)鏈接上每次接收到的數(shù)據(jù)量比較平滑,因而帶寬抖動(dòng)較小。當(dāng)文件數(shù)據(jù)存儲(chǔ)在所述服務(wù)器的本地時(shí),根據(jù)文件下載流量和每次讀取的文件分片大小,控制文件分片的讀取頻率,其具體流程參照?qǐng)D6和圖9執(zhí)行,與圖6和圖9的區(qū)別在于,將圖6和圖9中的服務(wù)器從后臺(tái)下載分片數(shù)據(jù)替換成服務(wù)器從本地讀取分片數(shù)據(jù)。圖10是本發(fā)明提供的一種文件下載裝置的結(jié)構(gòu)圖。如圖10所示,該裝置包括接收模塊1001和下載模塊1002。接收模塊1001,用于接收文件下載請(qǐng)求。下載模塊1002,用于控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。下載模塊1002包括調(diào)度器和數(shù)據(jù)讀取單元。所述調(diào)度器,用于控制讀取文件分片的頻率。所述數(shù)據(jù)讀取單元,用于根據(jù)所述調(diào)度器的調(diào)度結(jié)果讀取文件分片,將讀取的文件分片發(fā)給請(qǐng)求文件下載的客戶端。所述調(diào)度器,用于根據(jù)文件下載流量,從當(dāng)前處于等待調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接。所述數(shù)據(jù)讀取單元,用于為所述調(diào)度器調(diào)度出的鏈接讀取文件分片。其中,數(shù)據(jù)讀取單元將讀取的文件分片發(fā)給請(qǐng)求文件下載的客戶端后,如果該客戶端請(qǐng)求下載的文件未下載完畢,則該客戶端與服務(wù)器的鏈接進(jìn)入等待調(diào)度狀態(tài)。所述調(diào)度器,用于利用服務(wù)器當(dāng)前能夠提供的文件下載流量的最大值除以最大文件分片的大小,將所得的商確定為調(diào)度出的鏈接的個(gè)數(shù)。所述調(diào)度器,用于按照各個(gè)鏈接進(jìn)入等待調(diào)度狀態(tài)的由先到后的順序進(jìn)行調(diào)度。所述數(shù)據(jù)讀取單元,用于每次將服務(wù)器讀取的文件分片的一部分發(fā)給請(qǐng)求文件下載的客戶端。所述數(shù)據(jù)讀取單元,用于從后臺(tái)下載文件分片,或者從服務(wù)器本地讀取文件分片。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種文件下載方法,其特征在于,該方法包括服務(wù)器接收文件下載請(qǐng)求后,控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述控制讀取文件數(shù)據(jù)的頻率包括 利用調(diào)度器控制服務(wù)器讀取文件分片的頻率。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述利用調(diào)度器控制服務(wù)器讀取文件分片的頻率包括服務(wù)器根據(jù)文件下載流量,從當(dāng)前處于等待調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接,為該若干個(gè)鏈接讀取文件分片;其中,服務(wù)器將讀取的文件分片發(fā)給請(qǐng)求文件下載的客戶端后,如果該客戶端請(qǐng)求下載的文件未下載完畢,則該客戶端與服務(wù)器的鏈接進(jìn)入等待調(diào)度狀態(tài)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)文件下載流量,從當(dāng)前處于調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接包括利用服務(wù)器當(dāng)前能夠提供的文件下載流量的最大值除以最大文件分片的大小,所得的商是調(diào)度出的鏈接的個(gè)數(shù)。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述調(diào)度出若干個(gè)鏈接包括 按照各個(gè)鏈接進(jìn)入等待調(diào)度狀態(tài)的由先到后的順序進(jìn)行調(diào)度。
6.根據(jù)權(quán)利要求2至5任一權(quán)利要求所述的方法,其特征在于,所述將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端包括每次將服務(wù)器讀取的文件分片的一部分發(fā)給請(qǐng)求文件下載的客戶端。
7.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述讀取文件分片包括 服務(wù)器從其后臺(tái)的其他服務(wù)器下載文件分片;或者,服務(wù)器從本地讀取文件分片。
8.一種文件下載裝置,其特征在于,該裝置包括接收模塊和下載模塊; 所述接收模塊,用于接收文件下載請(qǐng)求;所述下載模塊,用于控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述下載模塊包括調(diào)度器和數(shù)據(jù)讀取單元;所述調(diào)度器,用于控制讀取文件分片的頻率;所述數(shù)據(jù)讀取單元,用于根據(jù)所述調(diào)度器的調(diào)度結(jié)果讀取文件分片,將讀取的文件分片發(fā)給請(qǐng)求文件下載的客戶端。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述調(diào)度器,用于根據(jù)文件下載流量,從當(dāng)前處于等待調(diào)度狀態(tài)的鏈接中調(diào)度出若干個(gè)鏈接;所述數(shù)據(jù)讀取單元,用于為所述調(diào)度器調(diào)度出的鏈接讀取文件分片; 其中,數(shù)據(jù)讀取單元將讀取的文件分片發(fā)給請(qǐng)求文件下載的客戶端后,如果該客戶端請(qǐng)求下載的文件未下載完畢,則該客戶端與服務(wù)器的鏈接進(jìn)入等待調(diào)度狀態(tài)。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述調(diào)度器,用于利用服務(wù)器當(dāng)前能夠提供的文件下載流量的最大值除以最大文件分片的大小,將所得的商確定為調(diào)度出的鏈接的個(gè)數(shù)。
12.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述調(diào)度器,用于按照各個(gè)鏈接進(jìn)入等待調(diào)度狀態(tài)的由先到后的順序進(jìn)行調(diào)度。
13.根據(jù)權(quán)利要求9至12任一權(quán)利要求所述的裝置,其特征在于,所述數(shù)據(jù)讀取單元,用于每次將服務(wù)器讀取的文件分片的一部分發(fā)給請(qǐng)求文件下載的客戶端。
14.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述數(shù)據(jù)讀取單元,用于從該裝置所在服務(wù)器后臺(tái)的其他服務(wù)器下載文件分片,或者從該裝置所在的服務(wù)器本地讀取文件分片。
全文摘要
本發(fā)明實(shí)施例公開了一種文件下載方法和裝置。該方法包括服務(wù)器接收文件下載請(qǐng)求后,控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。該裝置包括接收模塊和下載模塊;所述接收模塊,用于接收文件下載請(qǐng)求;所述下載模塊,用于控制讀取文件數(shù)據(jù)的頻率,將讀取的文件數(shù)據(jù)發(fā)給請(qǐng)求文件下載的客戶端。應(yīng)用本發(fā)明能夠?qū)ξ募螺d流量進(jìn)行控制。
文檔編號(hào)H04L29/08GK102487401SQ20101058074
公開日2012年6月6日 申請(qǐng)日期2010年12月6日 優(yōu)先權(quán)日2010年12月6日
發(fā)明者黃仁海 申請(qǐng)人:騰訊科技(深圳)有限公司