1

libtorrent ( http://www.rasterbar.com/products/libtorrent/manual.html#queuing )を使用している (私が開発した) 2 つ以上のクライアントがあるとします。

他のクライアントからのファイルのダウンロードに効果的に優先順位を付けて、ファイルの断片/チャンク (ここでの torrent 用語は何でも) をファイルの最初から最後に向かってランダムな順序ではなくダウンロードできるようにすることはできますか?

(もちろん、可用性とパフォーマンスの理由から、一部の「多重化」/「絡み合い」を許可していますが、ここでの目標は、ファイルの最初から最後までできるだけ直線的かつ迅速にダウンロードすることです)

ここで考えている目標は、ファイルをすばやくプレビューすることです。libtorrent / おそらく他の C++ torrent ライブラリを使用してこれを最も効果的に行う方法は?

(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()ピースの目標完了時間を設定するために使用されます。このような部分はタイム クリティカルな部分と見なされ、期限順に並べられ、最速のピアを使用してそれらの部分からブロックを要求し、期限順にダウンロードしようとします。

ここで、2 つの別個のクライアント (おそらく異なるマシンで実行されている) が、ダウンロードする部分を調整する必要があるという印象も受けます。そうですか?あなたが何を求めているのかは完全には明らかではありませんが、libtorrent にそれを求める簡単な方法はありません。

これらのクライアントがチャットして調整するための新しい拡張メッセージを実装する libtorrent 用のプラグインを作成できます。これにより、優先度を 0 に設定することで、他のクライアントがダウンロードしている特定の作品の選択を解除できます。

于 2013-01-17T06:14:23.580 に答える