使用libtorrent优先使用torrent下载序列

时间:2013-01-15 14:10:07

标签: c++ bittorrent libtorrent

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

我是否可以优先从其他客户端有效下载文件,以便他们从文件的开头到结尾下载文件的块/块(这里有什么是torrent术语),而不是随机顺序?

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

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

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

1 个答案:

答案 0 :(得分:2)

您当然可以使用torrent_handle::prioritize_pieces()torrent_handle::prioritize_files()对部分和文件进行优先排序。请参阅the documentation

但这不足以按顺序下载。为此,您可以使用torrent_handle::set_sequential_download()启用顺序下载。这将按顺序发出新的作品请求。请记住,满足请求的时间会有很大差异,具体取决于您与之交谈的对等方。按顺序发出请求并不一定意味着按顺序接收这些部分。

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

现在,我的印象是你想要两个独立的客户端(大概是在不同的机器上运行)来协调他们下载的部分。是对的吗?你所要求的并不完全清楚,但是没有简单的方法要求libtorrent这样做。

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