c++ - 使用 libtorrent 确定 torrent 下载序列的优先级

标签 c++ bittorrent libtorrent

假设我有 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/

相关文章:

algorithm - P2P distribution - 监督节点的抽象算法

cluster-computing - 在集群上分发数据(使用种子?)

linux - ./configure for libtorrent 在 Linux 上的问题

python - 如何使用 python-libtorrent 下载特定文件

c++ - 使用其他类的 vector 作为反向迭代器

c++ - Mingw32 交叉编译的控制台应用程序在 Windows XP 上不执行任何操作

c++ - 初始化列表似乎取决于类中变量的顺序

c++ - C++ 中的 Bencode 解析器

c++ - 堆叠协程 + gdb = "previous frame inner to this frame (corrupt stack)?"

c++ - 使用 libtorrent 下载特定片段