Предположим, у меня есть 2+ клиентов (разработанных мной) ВСЕ, используя libtorrent ( http://www.rasterbar.com/products/libtorrent/manual.html#queuing )
Могу ли я расставить приоритеты при загрузке файла с других клиентов, чтобы они загружали части / куски файла (какова здесь терминология торрента) от начала файла до его конца и не совсем в случайном порядке?
(конечно, я разрешаю некоторые «мультиплексные» / «переплетающиеся» фрагменты по причинам доступности и производительности, но цель здесь — загрузить как можно более линейно и быстро от начала файла до конца, насколько это возможно)
Цель, о которой я здесь думаю, — это быстрый предварительный просмотр файла. Как сделать это наиболее эффективно, используя libtorrent / возможно другую торрент-библиотеку C ++?
(Меня не очень интересуют торрент-реализации с использованием недвоичных языков, таких как Java или Python — мне нужен машинный код из соображений производительности и безопасности, поэтому C, C ++ или, возможно, D вполне подойдут)
Вы можете, конечно, расставить приоритеты для частей и файлов с torrent_handle::prioritize_pieces()
а также torrent_handle::prioritize_files()
, Увидеть документация.
Этого будет недостаточно для загрузки по порядку. Для этого вы можете включить последовательную загрузку с torrent_handle::set_sequential_download()
, Это будет выдавать новые запросы на заказ. Имейте в виду, что время, которое требуется для удовлетворения запроса, сильно зависит от того, с кем вы разговариваете. Выполнение запросов по порядку не обязательно означает получение частей по порядку.
Есть другой механизм, чтобы попытаться сделать это. torrent_handle::set_piece_deadline()
используется для установки целевого времени завершения произведения. Такие части считаются критическими по времени, и они упорядочены по их крайнему сроку, и самые быстрые одноранговые узлы используются для запроса блоков из этих частей, пытаясь загрузить их в порядке крайнего срока.
Теперь у меня также складывается впечатление, что вы хотите, чтобы два отдельных клиента (предположительно работающие на разных компьютерах) координировали, какие части они загружают. Это правильно? Не совсем понятно, о чем вы спрашиваете, но нет простого способа попросить libtorrent сделать это.
Вы можете написать плагин для libtorrent, который реализует новое сообщение расширения для этих клиентов для общения и координации, что может отменить выбор определенных фрагментов, которые загружает другой клиент, установив их приоритет на 0.
Других решений пока нет …