1

假设我有 2 个以上的客户端(由我开发)全部使用 libtorrent(http://www.rasterbar.com/products/libtorrent/manual.html#queuing

我是否可以有效地优先考虑从其他客户端下载文件,以便他们从文件的开头到结尾下载文件的片段/块(无论是什么种子术语),而不是完全按照随机顺序?

(当然,出于可用性和性能的原因,我允许一些“多路复用”/“交织”片段,但这里的目标是从文件开头到结尾尽可能线性和快速地下载)

我在这里考虑的目标显然是快速预览文件。如何使用 libtorrent / 可能是其他 C++ 种子库最有效地做到这一点?

(我对使用非二进制语言(如 Java 或 Python)的 torrent 实现不太感兴趣——出于性能和安全性的原因,我需要机器代码,因此,C、C++ 或可能的 D 都符合要求)

4

1 回答 1

3

您当然可以使用 和 对片段和文件进行优先级torrent_handle::prioritize_pieces()排序torrent_handle::prioritize_files()。请参阅文档

但是,这还不足以按顺序下载。为此,您可以使用torrent_handle::set_sequential_download(). 这将按顺序发出新的工件请求。请记住,满足请求所需的时间会因您与哪个对等方交谈而有很大差异。按顺序提出请求并不一定意味着按顺序接收碎片。

还有另一种机制可以尝试这样做。torrent_handle::set_piece_deadline()用于设置一个片段的目标完成时间。这些片段被认为是时间关键片段,它们按截止日期排序,最快的对等节点用于从这些片段中请求块,并尝试按截止日期顺序下载它们。

现在,我还觉得您希望两个独立的客户端(可能在不同的机器上运行)来协调他们下载的部分。是对的吗?目前还不完全清楚你在问什么,但没有简单的方法可以让 libtorrent 做到这一点。

您可以为 libtorrent 编写一个插件,为这些客户端实现一个新的扩展消息以进行聊天和协调,这可以通过将其他客户端的优先级设置为 0 来取消选择其他客户端正在下载的某些片段。

于 2013-01-17T06:14:23.580 回答