連楠楠 張偲 鈕亮
摘要:下載是網絡應用中最重要的組成部分,而即使在下載技術相對成熟的今天,還是有很多情況不能達到滿帶寬負荷地下載資源,本文設計的多人協作下栽模式,在多線程下栽的基礎上,應用多用戶同時提取資源的部分數據,再整合至傳輸速度快的服務器,實現快速下載的目的。
關鍵詞:多線程;文件傳輸;下載
中圖分類號:C931 文獻標志碼:A 文章編號:1000-8772(2013)15-0208-03
1.引言
中國互聯網規(guī)模與日俱增,越來越多的人開始使用互聯網,而在使用互聯網時,最重要的一個概念就是下載。下載的速度、占資源量和穩(wěn)定性一直被作為下載方式好壞的最重要的評估。目前的下載方式有HTTP方式,FTP方式,ED2K方式,BT方式,迅雷下載等。其中,FTP下載是最原始也最簡單的下載方式,服務器離客戶機的距離越近,下載人數越少,下載速度就越快,BT下載是現在最流行的P2P下載模式,利用用戶之間的相互傳輸來下載所需文件,下載的人數越多,上傳給其他用戶的也就越多,下載速度也就越快。由此可見,較近服務器上的,下載人數較少的文件適合用FTP下載,網絡上很熱門的文偉置合用P2P下載。
然而,在下載資源的時候會碰到這樣一種情況:資源的原始地址是一個很遠的服務器,資源的下載者很少,當下載者要下載該資源時,資源數據的傳輸受到服務器出口帶寬的影響,并且將通過很多網絡節(jié)點傳輸到下載者的電腦中,嚴重影響速度。所以無論是傳統的FTP下載還是現今流行的P2P下載,都無法達到理想的下載速度。曾經網絡上流行過的乾坤小挪移工具,如今迅雷下載工具的離線下載功能都是用來處理這種資源,這些方法不需要用戶在線,就可以將遠方服務器上的資源慢慢移動到較近服務器,然后供應下載。但是利用離線下載工具需要服務器提供挪移功能,需要一定費用,而且單個服務器提取遠方服務器上資源的速度依然很慢,用戶雖然可以不用上線,卻依然要等待很久。多人協作下載模式正是用于解決這種下載問題。
2.基本思想
多人協作下載是基于多線程下載的文件挪移方法。在單條線程下載速度慢的時候,我們一般使用多線程下載,即在發(fā)送端將要傳輸的文件分割為大小相當的多塊,用多個線程,將這些塊同時向目標端發(fā)送。目標端可監(jiān)聽發(fā)送端的傳輸請求,一旦接到新的請求,則創(chuàng)建一個新的線程,與發(fā)送端的發(fā)送線程對應,接收數據,并記錄數據傳輸過程,下載完成的數據根據日志文檔的位置記錄對號入座,組成完整文件。
事實上在服務器上下載資源的時候,下載者必須遵守服務器設定的線程限制,所以往往只能使用單線程下載或者極少的幾個線程進行下載。而服務器的下載線程限制是針對一個IP地址,如果能夠用網內多條寬帶,多個IP地址同時去下載文件的一部分,就能有效提高下載速率,多人協作下載就是這樣的下載模式。發(fā)送端源頭的操作方式與多線程下載類似,將文件分割為大小相當的多塊,在傳輸過程中,將文件塊傳輸請求發(fā)向網內多個目標,每條寬帶就可以下載一個或多個文件塊,然后上傳到較近的目標端服務器,合并為原文件,以供快速下載。
見圖示1:
3.實現原理
3.1下載過程
下載之前,首先要辨識資源屬性,包括標識資源的ID、鏈接地址、保存目錄、文件大名稱、資源大小等。然后要先將資源分成若干塊,這就需要建立一個臨時文件來保存每塊數據的信息,其中包括塊在原文件的起始位置,塊的長度,以及該塊的文件名。
多人協作下載模式由發(fā)送端服務器,目標端服務器和一個客戶機群組成,但是在下載的時候,只用到發(fā)送端服務器和客戶機群,其中客戶機群有一個主客戶機,即創(chuàng)建下載任務的客戶機。在下載過程中,主客戶機不停地檢測客戶機群中是否有空閑客戶機,一旦發(fā)現空閑客戶機,就指示該客戶機像發(fā)送端服務器申請接受數據。然后發(fā)送端將檢測已經傳輸完成的和正在給其他客戶機傳輸的數據大小及位置,取出接下來應傳輸的數據塊并向客戶機發(fā)送數據??蛻魴C在接收數據時依照發(fā)送端服務器分割塊時的文件名來對接收的數據塊命名,同時創(chuàng)建臨時文件,記錄接收數據的起始位置,同時動態(tài)記錄已傳輸數據的大小,以便監(jiān)控傳輸進度,完成傳輸則退出。
然而在下載的過程中,不能保證每臺客戶機在傳輸期間都能保持在線狀態(tài),所以在傳輸中斷的時候,會先檢測客戶機是否離線,如果還在線,則申請重新傳輸;倘若客戶機短時間內沒能繼續(xù)接受數據,則判斷為客戶機離線,將直接結束該數據塊的傳輸,發(fā)送端服務器也不會記錄到已傳輸,這樣一次數據塊的傳輸就宣告失敗,在下次又有空閑客戶機的時候,依然從以上數據塊開始傳輸。這種設計,就可以保證在下載過程中,每一個數據塊都能夠完整地傳輸到客戶機中,而每一個客戶機都能夠不間斷地下載數據塊,不會因為一個接收了下載任務的客戶機的斷線而耽擱整體下載進度。
3.2上傳及整合
主客戶機創(chuàng)建下載任務的同時,將在目標端服務器上創(chuàng)建一個以資源文件名命名的文件夾,用來接收各客戶機上傳的數據塊。
在文件的數據塊被從發(fā)送端服務器下載到客戶機時,會有臨時文件記錄數據塊的已傳輸大小,當數據傳輸完成后,就會斷開線程,此時一個完整的數據塊就已經存在于某一臺客戶機的硬盤里。一塊數據一旦下載完成,就會立刻通過ftp協議上傳至目標服務器中主客戶機創(chuàng)建的文件夾。
當所有數據塊都上傳到目標端服務器,主客戶機又將創(chuàng)建一個文件,通過文件讀寫操作,將數據塊的內容按照數據塊名字的順序拷貝到該文件,當所有數據塊都連接到一起,就組成了一個完整的文件,這個文件將存在于目標端服務器以供網內所有用戶下載。
4.小結
多人協作下載模式的設計旨在提高冷門資源的下載效率?;诙嗑€程下載技術,由多用戶同時提取發(fā)送端服務器上的資源,以達到快速下載的目的,針對較遠服務器上的資源和下載人數少的資源,都有一定應用價值。