meta-URI在使用libtorren数据时应该等待多长时间?

2024-06-16 19:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过提供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分钟?在

这到底是怎么回事?在


Tags: 数据代码noturi句柄seshaspause
2条回答

没有一个时间点可以肯定地说元数据将永远不会被获取。在

假设有一个人在他们的机器上有完整的信息。他们将打开个人电脑,两年后加入swarm和DHT。在

如果你等两年,下载就会成功。否则就会失败。在

你必须任意决定你愿意等多久:没有失败的“保证”。在

正如Borealid指出的,无法确定拥有元数据的人在世界上不存在(但目前处于离线状态)。在

如果您有兴趣知道某人现在是否有元数据(或多或少),我的基本建议是您至少等待一个DHT公告间隔。在

有几个步骤需要成功:

  1. DHT引导(查找DHT节点)
  2. DHT公告(查找BitTorrent对等机)
  3. 连接到对等点
  4. 拥有具有元数据(并支持元数据扩展)的对等方。绝大多数同行都支持这种扩展。在

从技术上讲,每一步都有一个单独的超时。假设您已经引导并与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。在清除这些位之前,假设对等点是活动的或存在的是不安全的。在

相关问题 更多 >