BT原始碼學習心得(一):總體描述
author: wolfenstein
BT的原始碼是使用python寫的,這是一種動態類型的語言,所有的對象不需要定義其類型,任何對象可以作為參數傳入某個函數中,唯一的要求是當調用該對象的某個方法時,它必須存在。另外這種語言提供了大量的模組,這些模組中很多都能在不同的平台實現其功能,大大得方便了編寫跨平台程式。
在BT的代碼中,主要功能都有命令列模式和圖形介面模式兩種執行方式,但最後它們執行的核心功能的代碼都是相同的,區別在於執行這些核心功能時,傳遞給它們的參數是從命令列和設定檔處擷取還是從圖形介面中擷取。
在我開始學習時,看的是4.0.3版本的代碼。主要有兩個主要的執行模組btdownloadgui和btmaketorrentgui,前者是用戶端,後者是製造種子檔案的工具(從4.0.0版本開始,btmaketorrentgui代替了btcompletedir)。另外,還有個tracker模組也很重要。學習的時候如果喜歡直接切入正題,就可以不看和gui相關的部分,直接看實現核心功能的模組。
提一形介面,BT的圖形介面模組用的是gtk,它的詳細資料可以在這裡找到:
[ http://www.pygtk.org/ ] http://www.pygtk.org/
使用gtk編寫圖形介面的好處是它的跨平台性很好,可以在不同的作業系統上產生風格相近的圖形介面。另外在BT中貌似還用了另一個圖形介面模組庫(btdownloadcurses),我大概看了一下說明,好像這個curses只能用於某些平台,想了下我主要的學習目的是BT,於是在GUI方面就集中精力攻gtk了,這個curses庫就沒有去看它。
我學習BT的過程大概如下:
看python語言教程熟悉python語言。
試著看btdownloadgui,發現看著頭很大,另外發現很多模組在python網站上的模組參考手冊上沒有。遂發現了gtk的網站,熟悉了一下使用gtk編寫GUI程式的基本方法後,繼續試圖看btdownloadgui的圖形部分,有些明白,但是還是感覺到有些吃力。
開始嘗試轉移一下目標,先看btmaketorrentgui,研究一下種子檔案是怎麼產生的,如果心裡對種子檔案的結構有瞭解再研究下載部分的代碼應該能輕鬆些。這部分比較成功得完成了,學習到了BT的種子檔案的結構,還對gtk的GUI程式編寫也比較熟悉了。
接下來看的是tracker部分的代碼,看的時候基本上都看完了,知道了一個tracker是如何得與用戶端通訊。但是對於一些具體的資料結構可能還會存在一些模糊的地方。
最後回過頭來看btdownloadgui的代碼,發現終於可以順利得看下去了。然後將所有看到的結果總結起來,學習到了BT的通訊協定。
今後的部分將把以上說的學習過程具體展開。