03.02 教程:用golang從零開始手寫一個bt下載客戶端

概述

當我們通過bt下載一個文件的時候,有沒有想過為什麼bt下載會比普通下載要快呢?這中間到底經歷了哪些有趣的事情呢?這篇文章將為大家揭曉bt下載的秘密,並且我們將從零開始用golang手寫一個bt下載的客戶端,其他語言類似。

目錄

本教程將分為兩部分來詳細介紹bt下載的細節:

1.通過示例演示bt下載的基本流程和原理

2.使用golang從0開始手寫一個bt下載的客戶端

3.針對客戶端的缺點討論改進方案

bt下載原理

BitTorrent是一個從互聯網下載和分發文件的協議,在傳統的client/server架構中,下載者們通常都從一箇中心服務器獲得一個完整文件內容,但在BitTorrent網絡中,下載者們通常從其他人那裡下載一個文件的分片,並且分享自己已經下載的分片,這樣就構成了一個p2p(peer-to-peer)網絡。用圖片來描述就是:


教程:用golang從零開始手寫一個bt下載客戶端

cs網絡和p2p網絡


概念

當我們要通過p2p網絡下載一個文件時,我們首先會得到一個.torrent格式的文件,裡面包含了要下載的文件的信息:從哪裡知道其他人也在下載改文件,文件的指紋信息等。接下來需要解決的問題就是:我們如何找到其他的peers,這就像你想移民但你自己又沒有途徑,這時候你可以找一箇中介,這個中介我們稱之為tracker,他記錄了peers的通信方式,peer和peer之間可以通過tracker來發現彼此。當我們獲得了其他peers的信息之後,就可以和他們進行連接並下載文件了。擁有完整資源的peer都可以做種子。

搭建P2P網絡

因此接下來我們將在本機手動搭建一個p2p網絡,用以演示p2p的工作原理。首先需要一個tracker服務器BitCometTracker,peers們可以註冊自己到該服務器,其他人從tracker服務器獲得peers的列表。接下來需要用兩個bt客戶端,我們選擇BitComet和qBittorrent。uTorrent有廣告和流氓軟件,所以不用他。

1.啟動BitCometTracker,啟動後會顯示使用的端口8080


教程:用golang從零開始手寫一個bt下載客戶端


2.啟動BitComet客戶端,點擊“文件”-》“製作torrent文件”-》選擇一個文件,填寫tracker服務器地址為http://127.0.0.1:8080/announce,任務列表中就會出現一個待上傳的列表。這個過程俗稱“做種”


教程:用golang從零開始手寫一個bt下載客戶端

bt種子

3.把剛才生成的.torrent文件拷貝到其他目錄,啟動qbittorrent客戶端,在客戶端中載入剛才拷貝過來的.torrent文件,可以看到正在下載


教程:用golang從零開始手寫一個bt下載客戶端

bt下載


好,到現在為止,我們已經瞭解了BT下載的原理和流程,下篇文章我們將用golang實現一個這樣的簡易的BT下載客戶端。敬請關注!


分享到:


相關文章: