我试图通过提供magnetinguri从DHT下载元数据,但有时单个URI需要5分钟以上。在
我正在使用这样的代码
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")
那么,我需要等待元数据多长时间? 或者我可以在为新的magnetinguri创建新句柄以获取元数据时保持该句柄处于活动状态?在
是否有超时设置或类似的设置?在
更新:
我的意思是,有一个神奇的数字,比如X分钟。 如果它不能在X分钟内获取元数据,那么它就不能在24小时内获取元数据。在
或者有没有可能,它可以在24小时内到达,但不是前x分钟?在
这到底是怎么回事?在
没有一个时间点可以肯定地说元数据将永远不会被获取。在
假设有一个人在他们的机器上有完整的信息。他们将打开个人电脑,两年后加入swarm和DHT。在
如果你等两年,下载就会成功。否则就会失败。在
你必须任意决定你愿意等多久:没有失败的“保证”。在
正如Borealid指出的,无法确定拥有元数据的人在世界上不存在(但目前处于离线状态)。在
如果您有兴趣知道某人现在是否有元数据(或多或少),我的基本建议是您至少等待一个DHT公告间隔。在
有几个步骤需要成功:
从技术上讲,每一步都有一个单独的超时。假设您已经引导并与DHT建立了有效的连接,下一个问题是实际确保对DHT的公告有效并完成。在
Torrents应该是announce to the DHT每隔15 minutes。不过,它可以在libtorrent中配置,称为dht_announce_interval。如果DHT有问题导致它错过更新(比如,DHT在添加magnetic链接时没有完全引导),那么您可能需要再等待15分钟,它才会再次发布。在
另一件事是要均匀地在脑海里播报。这意味着第一次尝试可能不会在添加磁铁链接时立即进行。在
为了更确定是否有对等方,还可以强制更新DHT(在torrent_handle对象上调用force_DHT_announce())。如果你在几分钟内这样做(如果你还没有找到任何同行),它也可能会阻止任何问题,使第一次宣布失败。在
一旦你有了一个连接的bittorrent对等机,你就可以相当确定DHT的宣布成功了(除非你是从本地对等发现中得到的)。查看对等列表(torrent_handle::get_peer_info())时,每个peer_info条目都有一个源标志字段,可以告诉您它是否来自DHT。在
一旦你有了一个对等点,你可能需要等待一个PEX间隔(60 seconds),以确保你有机会了解更多的对等点,然后再放弃,以防对等点本身没有元数据或没有发送它。在
没有简单的方法来判断对等方是否支持元数据或pex扩展,但是如果它不支持扩展协议,它也不会支持这两种扩展协议。您可以通过peer_info::flags和peer_info::支持_扩展来判断。在
只要在flag字段中设置了peer_info::connecting或peer_info::handshake位,则该对等端可能只是以前作为群的一部分的随机IP。在清除这些位之前,假设对等点是活动的或存在的是不安全的。在
相关问题 更多 >
编程相关推荐