假设我有 2 个以上的客户端(由我开发)都使用 libtorrent ( http://www.rasterbar.com/products/libtorrent/manual.html#queuing )
我能否有效地确定从其他客户端下载文件的优先级,以便他们从文件的开头到结尾而不是完全随机下载文件的片段/ block (无论这里是 Torrent 术语)?
(当然,出于可用性和性能的原因,我允许使用一些“多路复用”/“交织”的部分,但这里的目标是从文件开始到结束尽可能线性快速地下载)
我在这里考虑的目标显然是快速预览文件。如何使用 libtorrent 或其他 C++ torrent 库最有效地做到这一点?
(我对使用非二进制语言(如 Java 或 Python)的 torrent 实现不太感兴趣——出于性能和安全的原因,我需要机器代码,因此,C、C++ 或可能 D 都符合要求)
最佳答案
您当然可以使用 torrent_handle::prioritize_pieces()
和 torrent_handle::prioritize_files()
确定片段和文件的优先级。参见 the documentation .
但这不足以按顺序下载。为此,您可以使用 torrent_handle::set_sequential_download()
启用顺序下载。这将按顺序发出新的片段请求。请记住,满足请求所需的时间因与您交谈的对等方而异。按顺序提出请求并不一定意味着按顺序接收。
还有另一种机制可以尝试做到这一点。 torrent_handle::set_piece_deadline()
用于设置片段的目标完成时间。这些片段被认为是时间关键片段,它们按截止日期排序,最快的节点用于从这些片段请求 block ,并尝试按截止日期顺序下载它们。
现在,我还觉得您希望两个独立的客户端(可能在不同的机器上运行)协调它们下载的部分。是对的吗?目前还不完全清楚你在问什么,但没有简单的方法可以让 libtorrent 做到这一点。
您可以为 libtorrent 编写一个插件,为这些客户端实现新的扩展消息以进行聊天和协调,这可以通过将其他客户端的优先级设置为 0 来取消选择其他客户端正在下载的某些片段。
关于c++ - 使用 libtorrent 确定 torrent 下载序列的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339532/