libtorrent源碼分析(一)整體框架

一. 前言

  libtorrent是著名的BT下載開源庫,基於boost庫編寫,可以實現BT下載功能而且功能齊全,代碼也值得研究,在此開文分析libtorrent的源碼。一切就從整體框架開始吧。

二. bt下載流程簡介

  1. 磁力鏈接和種子文件
      BT下載的第一步是衆所周知的下載磁力鏈接/種子文件,然後下載程序會根據磁力鏈接/種子文件來下載文件。這是作爲用戶表層看到的下載過程。實際上磁力鏈接和種子文件的作用在於爲本地客戶端尋找擁有相同下載目標的其他各個客戶端以及中央服務器(tracker)。

  2. 建立鏈接
      標準p2p下載是客戶端和客戶端之間的下載,需要通過peer wrie協議建立鏈接。peer wire協議是封裝在udp/tcp之上的協議,實現了不同客戶端之間的握手、下載完成情況的分享、下載/上傳的請求、種子文件的尋找等步驟。

  3. 下載文件
      下載文件按一定的塊大小進行劃分,之後問詢各個客戶端是否具有相應的塊,有則下載。下載完成一個塊後通知其他客戶端已擁有該塊。

  4. 下載完成

三. 代碼大致框架

  根據上述下載流程,我們可以將libtorrent代碼分爲以下幾部分:

  • 磁力鏈接和種子文件的處理部分,主要包括torrent, bdecode, bencode, file_storage等幾部分代碼
  • 底層API部分, 包括文件相關的block, file, io,piece_picker,infohash以及底層協議相關的libutp,tcp,http等部分代碼
  • 協議相關代碼,包括peer_connection,bt_peer_connection,web_peer_connection,peer_info,bitfield等部分
  • 其他部分

四. 總結

  本文簡要分析了libtorrent的框架組成,在後續文章會逐步分析各部分源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章