tracker

運行於伺服器上的程序

BT中的Tracker

是指運行於伺服器上的一個程序,這個程序能夠追蹤到底有多少人同時在下載同一個文件。客戶端連上tracker伺服器,就會獲得一個下載人員的名單,根據這個,BT會自動連上別人的機器進行下載。它是提供bt的伺服器。把文件用bt發布出來的人需要知道該使用哪個伺服器來為要發布的文件提供tracker。由於不指定伺服器,BitTorrent採用BT文件來確定下載源。

簡介


伺服器載必須角。載始及載程,停伺服器,息,獲取載息。協議,稱協議,程:
請求,息參;請求致思:(唯),載件,,端。。。
載息維護,收請求,首息錄(錄案,檢查否需),(非,根據設置參載請求)參載件(伺服器維護件載)載息返。
Client在收到tracker的響應后,就能獲取其它下載者的信息,那麼它就可以根據這些信息,與其它下載者建立連接,從它們那裡下載文件片斷。
tracker伺服器架設
tracker
tracker
tracker
tracker
BitTorrentTracker是一個高性能增強型BitTorrent伺服器。BitTorrentTracker同時支持HTTP和UDP的Tracker協議,採用高性能伺服器技術,支持多埠同時監聽,數據更新插件。BitTorrentTracker通過了8萬個文件和80萬個在線用戶的高強度測試。用戶可根據需要自行改寫資料庫通信插件,打造屬於自己的伺服器,配合伺服器端腳本可實現一個功能完備的BT伺服器。
架設好后,您的tracker伺服器地址格式為
外網ip:埠/announce
一點渣圖解翻譯勿噴
BitTorrentTracker的特點:
C++編寫,採用高性能網路通信技術,高效穩定。
配置簡單容易。
支持HTTP和UDP兩種連接模式,與BitTorrent客戶端完美配合。
可針對用戶數量,進行性能調節。
用瀏覽器進行遠程狀態監視。
支持自定義的資料庫插件,並提供一個SDK開發示例。
BitTorrentTracker更新日誌:
[CORE]修正了內存泄漏的錯誤
[CORE]修正了不能在Windows2000操作系統下運行的錯誤
[CORE]修正了長時間運行SessionTable數過高的問題
[CORE]使用新的多線程內核,提高了數據處理能力
[CORE]改進了程序數據檢索機制
[GUI]運行時每隔半小時在exe目錄里的TrackerLaunchLog.txt文件中記錄程序運行狀態
[GUI]配置對話框增強資料庫認證功能,分為資料庫中存在記錄和資料庫中通過驗證兩個級別
[CORE]db_fetch()函數參數改進,可指定資料庫認證級別
[CORE]改進了程序異常退出時的錯誤檢測機制,錯誤報告可以捕獲更多類型的程序運行時錯誤
[PLUGIN]db_fetch2()函數參數改進,可從資料庫同時查詢新增及刪除的記錄
[PLUGIN]db_mysql插件實現了db_fetch()和db_fetch2()函數的示例代碼
[PLUGIN]db_mssql插件實現了db_fetch2()函數的示例代碼
[GUI]添加了程序運行后自動啟動服務的選項
[GUI]添加了更多的資料庫選項
[GUI]在主界面和"config"對話框中加入了"help"鏈接
[GUI]在"config"對話框中加入了監聽TCP/UDP埠的可選項
[GUI]發生錯誤時顯示更詳細的提示信息
[CORE]增加了連接請求驗證模式,只處理資料庫中存在的任務
[CORE]修正了長時間運行引起的高CPU負載的問題
[CORE]改進了資料庫操作
[CORE]修正了錯誤報告中dmp文件不能被打包的問題
[CORE]修正了一些可能導致運行時錯誤的問題
[PLUGIN]增加了兩個數據讀取函數
client和tracker間通信協議細節
在“BT協議規範”中已經給出,這裡不再重複。下面我們具體分析tracker伺服器的實現細節。
從哪裡開始?
要建立一個tracker伺服器,只要運行程序就行了,它最少需要一個參數,就是–dfile,這個參數指定了保存下載信息的文件。Bttrack.p調用中的track()函數。因此,我們跟蹤到track.p中去看track()函數。
Track.p:track()
這個函數首先對命令行的參數進行檢查;然後將這些參數保存到config字典中。在BT中所有的工具程序,都有類似的處理方式。
接下來的代碼:
r=RawServer(Event(),config['timeout_check_interval'],config['socket_timeout'])
t=Tracker(config,r)
r.bind(config['port'],config['bind'],True)
r.listen_forever(HTTPHandler(t.get,config['min_time_between_log_flushes']))
t.save_dfile()
首先是創建一個RawServer對象,這是一個伺服器對象,它將實現一個網路伺服器的一些細節封裝起來。不僅tracker伺服器用到了RawServer,我們以後還可以看到,由於每個client端也需要給其它client提供下載服務,因此也同時是一個伺服器,client的實現中,也用到了RawServer,這樣,RawServer的代碼得到了重用。關於RawServer的詳細實現,在後面的小節中進行分析。
接著是創建一個Tracker對象。
然後讓RawServer綁定在指定的埠上(通過命令行傳遞進來)。
最後,調用RawServer::listen_forever()函數,使得伺服器投入運行。
最後,在伺服器因某些原因結束運行以後,調用Tracker::save_dfile()保存下載信息。這樣,一旦伺服器再次投入運行,可以恢復當前的狀態。

其它相關


BT源碼的分佈
把BT的源碼展開之後,可以看到有一些python程序,還有一些說明文件等等,此外還有一個BitTorrent目錄。這些python程序,實際是一些小工具,比如製作metafile的、運行tracker伺服器的、運行BTclient端的btdownloadheadless等等。而這些程序中,用到的一些python類的實現,都放在子目錄BitTorrent下面。我們的分析工作,通常是從工具程序入手,而隨著分析的展開,則重點是看BitTorrenet子目錄下的代碼。
在談到如何開發可維護的代碼的一篇文章中,其中提到的一條就是開發一些小工具以簡化工作,我想BT的這種源碼結構,也正是作者思想的一種體現吧。
python的應用
python和我們以前接觸的c/c++不一樣的第一個地方就是它的函數在定義的時候,不用指定參數類型。既然這樣,那麼,在調用函數的時候,你可以傳遞任意類型的參數進來。例如這樣的函數:
deffoo(arg):
printtype(arg)
你可以這樣來調用:
a=100
b=“helloworld”
foo(a)
foo(b)
輸出結果是:
這是因為,第一次調用foo()的時候,傳遞的是一個整數類型,而第二次調用的時候,傳遞的是一個字元串類型。
這種參數具有動態類型的特性,是c/c++等傳統的語言是所不具備的。這也是python被稱為動態語言的一個原因吧。C++的高級特性模板,雖然也使得參數類型可以動態化,但使用起來,遠沒有python這麼簡單方便。
電子音樂中的Tracker
現在許多新遊戲不惜大量硬碟空間使用Wave或APE等音樂格式,但在以前由於存儲空間很小,遊戲的音樂大多是都是模塊音樂。(直到現在,一些對容量有苛刻要求的遊戲仍然使用這類格式)
除了在遊戲中。