BT原始碼學習心得(十):用戶端原始碼分析(相關對象一覽)

來源:互聯網
上載者:User

 

 BT原始碼學習心得(十):用戶端原始碼分析(相關對象一覽)Author:wolfenstein(NeverSayNever),BitTorrent/download.py中的Multitorrent對象能夠開始實際的下載任務。要開始下載,需要建立一個Multitorrent對象,然後反覆得調用start_torrent方法開始一個新的下載,調用這個方法時必須已經準備好相應的下載任務的資訊作為參數,包括已經處理好的元資訊(經過BitTorrent/ConvertedMetainfo.py模組進行處理),配置資訊,一個實現了FeedBack介面的類(這樣種子在下載的時候狀態發生變化可以及時反映出來,至於是反應在文字資訊上還是在圖形介面上那就看這個FeedBack介面的實現),以及儲存種子檔案內容的本地目錄。這個函數會返回一個_SingleTorrent對象,代表一個單一的種子檔案下載任務,這個對象前面的一條短線代表它是私人對象,不能單獨建立,只能通過start_torrent來進行建立。它除了使用FeedBack介面來反應狀態變化以外,還可以允許介面模組主動地調用_SingleTorrent.get_status來擷取關於該種子檔案下載狀況的一些統計資訊。當然不要忘記調用multitorrent.rawserver.listen_forever()開始這一切的調度,在建立multitorrent類時,它會在內部建立一個rawserver。前面幾次都是直接上來就通過流程來剖析器,但是這次不一樣,因為用戶端的程式結構比較複雜,而且各種對象之間互相關聯,必須先對這些對象的功能有一個大致的瞭解才好繼續分析,因此這一次將簡要得介紹一下用戶端的下載程式中牽涉到的主要對象。Multitorrent:下載任務管理的主對象,定義於BitTorrent/download.py中,內部維護了一個RawServer,且可以建立_SingleTorrent(與其定義於同一模組中。)它內部還維護了其它對象。SingleportListener:管理網路連接,是Multitorrent中的RawServer的網路連接處理對象,定義於BitTorrent/Encoder.py中。FilePool:管理檔案池,定義於BitTorrent/Storage.py中,它可以保證同一時刻開啟硬碟上的檔案數量在一個限定的值以內。RateLimiter:速度限制類。定義於BitTorrent/RateLimiter.py中,它可以控制全部種子檔案下載時上傳的速度。Storage和StorageWrapper:儲存管理類。定義於BitTorrent/Storage.py和StorageWrapper.py中,它們的作用是對程式的其它部分屏蔽掉種子檔案中第幾塊對應於實際硬碟上的哪個檔案的位移量多少。即它對程式的其它部分提供諸如以下的這些服務,確定現在本地有第幾塊,沒有第幾塊;應其它部分要求讀出第幾塊(其它程式就不用管第幾塊實際上是硬碟上的那個檔案),然後它們好發送到網路上;其它部分從網路上得到一塊新的資料,叫它儲存到硬碟上。Storage和StorageWrapper都和_SingleTorrent一一對應。Choker:阻塞管理類。定義於BitTorrent/Choker.py中,它的作用是確定上傳的阻塞策略,即當前的串連中,阻塞哪些串連。與_SingleTorrent一一對應。Measure:速度測量器。定義於BitTorrent/CurrentRateMeasure.py中,它的作用是計算速率。在_SingleTorrent中定義了若干Measure對象來計算各種速率(如上傳,下載等)。RateMeasure:也是速度測量器。定義於BitTorrent/RateMeasure.py中,和Measure不一樣的地方在於它可以在初始化的時候傳入一個表示還剩多少位元組的參數進去,因而它多了一個功能,那就是根據當前的速率,估算出預計剩餘時間。_SingleTorrent中定義了一個RateMeasure。PiecePicker:塊選取器。定義於BitTorrent/PiecePicker.py中,進行“下一塊下載哪塊”這件事情的決策工作,與_SingleTorrent一一對應。Downloader:下載工作管理器。定義於BitTorrent/Downloader.py中,管理該種子任務中的所有下載工作。因為一個種子檔案的下載過程中要和很多個對等客戶打交道,因此需要建立若干個串連。與_SingleTorrent一一對應。Encoder:連線管理員。定義於BitTorrent/Encoder.py中,管理該種子檔案任務中的所有串連(不管是主動串連到其它對等客戶上或者是其它對等客戶串連到本地),與_SingleTorrent一一對應。Connection:串連。定義於BitTorrent/Connecter.py中,一個該對象對應於一個串連。因此一個_SingleTorrent中包含了若干個Connection對象(由Encoder負責統一管理)。SingleDownload:單一下載。定義於BitTorrent/Downloader.py中,對應一個串連中的下載。它與Connection一一對應,且由Downloader對象產生(Downloader.make_download),每次新的串連建立時,Encoder都會把這個串連儲存起來,並且產生一個SingleDownload對象。Upload:單一上傳。定義於BitTorrent/Downloader.py中,對應於一個串連中的上傳。和SingleDownload一樣,它與Connection一一對應,每次新串連建立時,由Encoder產生。Bitfield:位元影像對象。定義於BitTorrent/bitfield.py中,用來表示一個位元數組。它典型用途是表示當前的種子檔案的下載過程中,本地有第幾塊,沒有第幾塊。出現在兩個地方,StorageWrapper,儲存本地的塊擁有情況資訊,以及SingleDownload中,儲存別人的塊擁有情況資訊(以方便決定以後是不是要從他那裡下載)。Rerequester:跟蹤請求發生器。定義於BitTorrent/Rerequester.py中,作用就是和Tracing Service器打交道,來擷取對等客戶的資訊。與_SingleTorrent一一對應。DownloaderFeedback:下載任務狀態資訊搜集器。定義於BitTorrent/DownloaderFeedback.py中,它提供了搜集下載任務的狀態資訊的介面,可以完成狀態資訊的搜集以顯示給使用者。圖形介面程式或者其它的介面程式在調用_SingleTorrent的搜集資訊函數時,最終還是要和該對象打交道(可以參閱_SingleTorrent.get_status函數的實現)。與_SingleTorrent一一對應。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.