2015-09-25 33 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

相关问题