Долгие размышления над идеей ретрекеров, а также практический опыт использования оных приводят к неутешительному выводу: несмотря на всю привлекательность этой технологии, очень часто загрузка всё равно идет не на максимально возможной скорости.
Почему так происходит?
А потому что из всех, скажем, 1000 пиров, участвующих в распространении торрента, клиент коннектится к первым, скажем, 100 (ну или сколько там выставлено в настройках), и про остальных забывает. Очень часто с локальными пирами клиент просто не успевает соединиться, и, не смотря на наличие ретрекера, скачивание идет через интернет.
Можно ли с этим что-нибудь сделать?
Я вижу несколько вариантов.
1. Убедить разработчиков торрент-клиентов (того же uTorrent) добавить опцию приоритета пиров из той же подсети, в которой находитесь вы. Эта идея активно обсуждается на форуме uTorrent, приглашаю всех, кто знаком с английским, принять участие в дискуссии, потому что на данный момент разработчики добавлять такую опцию не хотят.
2. Через ipfilter.dat блокировать все IP, кроме тех, которые принадлежат вашему провайдеру (пример этого способа для Авангарда-СПб). К сожалению, если на раздаче нет локальных пиров, скачивание остановится совсем, а менять ipfilter.dat на лету не слишком удобно. С другой стороны, этот способ позволил мне увеличить скорость скачивания в 2-3 раза на некоторых раздачах.
3. Отключать DHT и PEX, а также блокировать домены трекеров, которыми вы пользуетесь, через hosts, чтобы списки пиров приходили только с ретрекера. Как и в пункте 2, проблема в том, что если на раздаче нет локальных пиров, качаться ничего не будет. Плюс накроется учет рейтинга на основном трекере.
4. Держать два клиента с разными настройками - один для локального трафика, другой для интернетовского. Неудобно, но работает.
5. Взять какой-нибудь оперсорсный клиент, типа Vuze (java) или Halite (C++), и дописать нужный функционал самим (возможно, одновременно добавив опциональный патчинг торрентов прямо в клиент). Хорошо, но многие ли станут менять клиент только из-за скорости?
6. Аналогично п. 1 или 5, но приоритет давать не IP из своей подсети, а всем IP, полученным с адреса retracker.local (другие варианты: со всех трекеров, которые находятся в той же подсети, что и вы, и/или со всех трекеров, адреса которых получены через bep-22). Это учтет пиринги провайдеров (один ретрекер на несколько сетей).
Коллеги, есть ли у кого-нибудь другие идеи решения этой проблемы? На мой взгляд, эта беда - главное ограничение, в которое упирается скорость скачивания при использовании ретрекеров на сегодняшний день.
Также вопрос к присутствующим здесь разработчикам на C++ или Java: готов ли кто-нибудь взяться за п. 5 или 6?