2015-09-25 71 views
2

我試圖通過提供磁力URI來下載DHT的元數據,但有時單個URI需要5分鐘以上。python libtorrent我應該等待元數據使用磁鐵URI多長時間?

我用這樣的代碼

while (not handle.has_metadata()): 
    try: 
     sleep(1) 
    except KeyboardInterrupt: 
     print("Aborting...") 
     ses.pause() 
     print("Cleanup dir " + tempdir) 
     shutil.rmtree(tempdir) 
     sys.exit(0) 
ses.pause() 
print("Done") 

所以我應該要多久等元數據? 或者我可以保持這個句柄處於活動狀態,同時爲新磁鐵uri創建新句柄以獲取元數據?

是否有超時設置或類似的東西?

UPDATE:

我的意思是,有一個神奇的數字,可以說X分鐘。 如果它無法在X分鐘內獲取元數據,那麼它無法在24小時內獲取元數據。

還是有可能的,它可以在24小時內取出,但不是第一次x分鐘?

這是如何工作的?

+1

最糟糕的情況是羣中沒有人獲得元數據/洪流。我想我會無限期地等待數據,直到用戶決定取消下載。 – Caramiriel

+0

@ Caramiriel謝謝,但最糟糕的情況是,在幾個小時後再次檢查它會更好,而不是無限期地等待?只是一個想法。這又提出了另外一個問題,需要多長時間才能到達羣中的每個人? – AMB

+0

我認爲北海公司解決了我想回復的問題。但絕對是最好保持它的外觀,但不要阻止任何用戶界面。讓它現在檢查,然後是元數據是否可用。無論如何,這可能是一個簡單的布爾值。 – Caramiriel

回答

3

正如Borealid指出的那樣,沒有辦法確定具有元數據的人在世界上不存在(但目前處於脫機狀態)。

如果您有興趣知道某人現在是否有元數據(或多或少),我的基本建議是您至少等待一個DHT公佈時間間隔。

有需要成功的幾個步驟:

  1. DHT引導(發現DHT節點)
  2. DHT宣佈(發現BitTorrent的對等體)
  3. 連接到具有對同行
  4. 具有元數據(並支持元數據擴展)。絕大多數同行都支持這種擴展。

從技術上講,每一步可能會有一個單獨的超時。假設你被引導並且與DHT有工作連接,那麼下一個擔心就是確保DHT的通告工作並完成。

流氓應該是announce to the DHT15 minutes。它可以在libtorrent中進行配置,但稱爲dht_announce_interval。如果DHT導致錯過更新(例如,添加磁鏈接時DHT未完全引導),則可能需要等待15分鐘才能再次發佈。

另一件需要記住的事情是,在libtorrent中,DHT宣佈試圖隨着時間的推移或多或少均勻分佈。這意味着當添加磁鏈時,第一次嘗試可能不會立即進行。

爲了更確定是否有對等點,你也可以強制更新DHT(在torrent_handle對象上調用force_dht_announce())。如果你這樣做了幾分鐘(如果你還沒有找到任何同伴),它也可能會解決任何問題,使第一次宣佈失敗。

一旦你有一個連接的bittorrent對等,你可以相當肯定DHT宣佈成功(除非你從本地對等點發現,我想)。當查看對等列表(torrent_handle :: get_peer_info())時,每個peer_info條目都有一個源標誌字段,它可以告訴你它是否來自DHT。

一旦你有一個同伴,你可能想等待一個PEX間隔(60 seconds),以確保你有機會在放棄之前瞭解更多的同齡人,以防對方本身沒有元數據或isn發送它。

有沒有簡單的方法來告訴對方是否特別支持元數據或PEX擴展,但如果它不支持擴展協議,它也不會支持。你可以通過peer_info :: flags & peer_info :: supports_extensions知道。

只要在標誌字段中設置了peer_info :: connecting或peer_info :: handshake位,對等方可能只是一個隨機IP,它曾經是羣的一部分。假設一個對等體是活着的或存在直到這些位被清除是不安全的。

+0

謝謝,idk我錯過了這個答案,現在才注意到。 – AMB

3

沒有時間可以肯定地說元數據永遠不會被提取。

假設有一個人在他們的機器上有完整的信息。他們將在兩年後開啓他們的個人電腦並加入swarm和DHT。

如果等待兩年,下載將成功。否則它會失敗。

你必須任意決定你願意等待多久:沒有失敗的「保證」。

+0

感謝您的回答,可以說我願意嘗試檢查元數據,然後再次,但我必須保持活動多久?對不起,我的英語不好。我的意思是現在足夠10分鐘,然後檢查? – AMB

+0

@AMB這種通用技術被稱爲「輪詢」。您經常查詢的次數越多,您知道任務完成的速度越快,但您花費的CPU時間也越多。這是一個沒有絕對正確答案的滑動比例尺。 – Borealid

相關問題