приоритизация последовательности загрузки торрента с помощью libtorrent

Предположим, у меня есть 2+ клиента (разработанных мной), ВСЕ использующие libtorrent ( http://www.rasterbar.com/products/libtorrent/manual.html#queuing )

Могу ли я эффективно расставить приоритеты для загрузки файла с других клиентов, чтобы они загружали части / куски файла (независимо от терминологии торрента) от начала файла к его концу, а не в случайном порядке?

(конечно, я допускаю некоторые «мультиплексирование»/«переплетение» фрагментов по соображениям доступности и производительности, но цель здесь — загрузить как можно более линейно и быстро от начала файла к концу)

Цель, о которой я думаю, — быстрый предварительный просмотр файла. Как сделать это наиболее эффективно, используя libtorrent/возможно, другую торрент-библиотеку C++?

(Меня не очень интересуют реализации торрентов с использованием небинарных языков, таких как Java или Python — мне нужен машинный код из соображений производительности и безопасности, поэтому C, C++ или, возможно, D — все подойдет)


person mrkafk    schedule 15.01.2013    source источник
comment
Похоже, что многие клиенты могут устанавливать приоритеты для определенных файлов. Возможно ли это через libtorrent или нет, я не знаю.   -  person Some programmer dude    schedule 15.01.2013


Ответы (1)


Вы, безусловно, можете расставить приоритеты частей и файлов с помощью torrent_handle::prioritize_pieces() и torrent_handle::prioritize_files(). См. документацию.

Однако этого будет недостаточно для загрузки по порядку. Для этого вы можете включить последовательную загрузку с помощью torrent_handle::set_sequential_download(). Это позволит выдавать новые запросы по порядку. Имейте в виду, что время, необходимое для удовлетворения запроса, сильно зависит от того, с кем вы разговариваете. Делать запросы по порядку не обязательно означает получать части по порядку.

Есть еще один механизм, чтобы попытаться сделать это. torrent_handle::set_piece_deadline() используется для установки целевого времени завершения работы над произведением. Такие фрагменты считаются критичными по времени фрагментами, и они упорядочены в соответствии с их крайним сроком, и самые быстрые одноранговые узлы используются для запроса блоков из этих фрагментов, пытаясь загрузить их в порядке крайнего срока.

Теперь у меня также сложилось впечатление, что вы хотите, чтобы два отдельных клиента (предположительно, работающих на разных машинах) координировали, какие части они загружают. Это правильно? Не совсем понятно, о чем вы спрашиваете, но нет простого способа попросить libtorrent сделать это.

Вы можете написать плагин для libtorrent, который реализует новое сообщение расширения для этих клиентов для чата и координации, которое может отменить выбор определенных частей, загружаемых другим клиентом, установив их приоритет на 0.

person Arvid    schedule 17.01.2013
comment
Синхронизация: не совсем так, я хочу, чтобы 1 клиент загружал как можно более последовательно с n других клиентов, которые загружают этот файл. Это специальное приложение для контента, которое полностью легально. :-) Что касается полной синхронизации и строгой последовательности загрузки, нет, я не за этим, я за мягкую синхронизацию, то есть загрузку как можно более последовательно, но не за счет большой скорости загрузки, что-то в этом роде. set_sequential_download() может помочь. В любом случае, ваш ответ великолепен, спасибо!! - person mrkafk; 17.01.2013