приоритизиране на последователности за изтегляне на торент с помощта на 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