tracker

tracker

Tracker 系統是一套專業化的工裝及刀具、夾具和量具智慧型資料庫管理系統,它能對企業生產過程中的工裝、刀具、夾具和量具進行整體的流程化管理,通過實時跟蹤工裝及刀夾量具的採購、出入庫、修磨、報廢、校準等過程,幫助庫管員、工藝員、製造工程師和工裝及刀夾量具主管等更有效地改善刀具管理過程,降低生產成本。

基本信息

BT中的Tracker

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

tracker伺服器是BT下載中必須的角色。一個BTclient在下載開始以及下載進行的過程中,要不停的與tracker伺服器進行通信,以報告自己的信息,並獲取其它下載client的信息。這種通信是通過HTTP協定進行的,又被稱為tracker HTTP協定,它的過程是這樣的:

client向tracker發一個HTTP的GET請求,並把它自己的信息放在GET的參數中;這個請求的大致意思是:我是xxx(一個唯一的id),我想下載yyy檔案,我的ip是aaa,我用的連線埠是bbb。。。

tracker對所有下載者的信息進行維護,當它收到一個請求後,首先把對方的信息記錄下來(如果已經記錄在案,那么就檢查是否需要更新),然後將一部分(並非全部,根據設定的參數已經下載者的請求)參與下載同一個檔案(一個tracker伺服器可能同時維護多個檔案的下載)的下載者的信息返回給對方。

Client在收到tracker的回響後,就能獲取其它下載者的信息,那么它就可以根據這些信息,與其它下載者建立連線,從它們那裡下載檔案片斷。

tracker伺服器架設

tracker tracker
tracker tracker

BitTorrent Tracker是一個高性能增強型BitTorrent伺服器。BitTorrent Tracker同時支持HTTP和UDP的Tracker協定,採用高性能伺服器技術, 支持多連線埠同時監聽,數據更新外掛程式。BitTorrent Tracker通過了8萬個檔案和80萬個線上用戶的高強度測試。用戶可根據需要自行改寫資料庫通信外掛程式, 打造屬於自己的伺服器, 配合伺服器端腳本可實現一個功能完備的BT伺服器。
架設好後,您的tracker伺服器地址格式為
外網ip:連線埠/announce
一點渣圖解翻譯勿噴

BitTorrent Tracker 的特點:
C++編寫,採用高性能網路通信技術, 高效穩定。
配置簡單容易。
支持HTTP和UDP兩種連線模式, 與BitTorrent客戶端完美配合。
可針對用戶數量, 進行性能調節。
用瀏覽器進行遠程狀態監視。
支持自定義的資料庫外掛程式, 並提供一個SDK開發示例。

BitTorrent Tracker 更新日誌:
[CORE] 修正了記憶體泄漏的錯誤
[CORE] 修正了不能在Windows2000作業系統下運行的錯誤
[CORE] 修正了長時間運行Session Table數過高的問題
[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伺服器的、運行BT client端的 btdownloadheadless 等等。而這些程式中,用到的一些 python 類的實現,都放在子目錄 BitTorrent 下面。我們的分析工作,通常是從工具程式入手,而隨著分析的展開,則重點是看 BitTorrenet子目錄下的代碼。

在談到如何開發可維護的代碼的一篇文章中,其中提到的一條就是開發一些小工具以簡化工作,我想BT的這種源碼結構,也正是作者思想的一種體現吧 。

python的套用

python和我們以前接觸的 c/c++ 不一樣的第一個地方就是它的函式在定義的時候,不用指定參數類型。既然這樣,那么,在調用函式的時候,你可以傳遞任意類型的參數進來。例如這樣的函式:

def foo(arg):

print type(arg)

你可以這樣來調用:

a = 100

b = “hello world”

foo(a)

foo(b)

輸出結果是:

<type ‘int’>

<type ‘str’>

這是因為,第一次調用 foo()的時候,傳遞的是一個整數類型,而第二次調用的時候,傳遞的是一個字元串類型。

這種參數具有動態類型的特性,是 c/c++等傳統的語言是所不具備的。這也是 python 被稱為動態語言的一個原因吧。C++的高級特性模板,雖然也使得參數類型可以動態化,但使用起來,遠沒有python這么簡單方便。

電子音樂中的Tracker

現在許多新遊戲不惜大量硬碟空間使用Wave或APE等音樂格式,但在以前由於存儲空間很小,遊戲的音樂大多是都是模組音樂。(直到現在,一些對容量有苛刻要求的遊戲仍然使用這類格式)

除了在遊戲中, 。

相關詞條

相關搜尋

熱門詞條

聯絡我們