официальные спецификации: http://www.bittorrent.org/beps/bep_0000.html < br /> неофициальная спецификация: http://wiki.theory.org/BitTorrentSpecification
BEncoding - это формат сериализации данных, используемый в BitTorrent для нескольких целей.
DHT - это глобальная, децентрализованная, итеративная система поиска на основе UDP, которая может использоваться для поиска клиентов, участвующих в определенном рое на основе infohash, который может быть либо получено непосредственно из магнитной ссылки или рассчитано из файла метаданных .torrent.
Если у вас есть URL-адрес объявления для трекера (необязательная часть торрент-файла или магнитная ссылка), вы можете получить адреса клиентов прямо из трекера.
После того, как вы получили адреса клиентов для определенного роя, вы можете подключиться к ним - или они будут подключаться к вам, если вы заявили о себе в DHT / ответственный трекер - с помощью проводного протокола bittorrent, который в основном является асинхронным протоколом обмена двоичными сообщениями. .
Чтобы получить полнофункциональный современный клиент bittorrent, вам необходимо реализовать следующее:
- узел DHT (кодирование через UDP)
- протокол объявления и очистки трекера (использует кодирование через HTTP и настраиваемый двоичный протокол через UDP)
- проводной протокол BitTorrent (настраиваемый двоичный протокол через TCP с дополнительным уровнем расширения. Некоторые сообщения закодированы. Транспортный протокол на основе UDP, предотвращающий перегрузку, также существует в качестве альтернативы TCP)
- парсер торрент-файлов (очевидно, Bencoding)
- общие вещи, такие как постановка в очередь активных торрентов, управление файлами, одновременный сетевой ввод-вывод
Это большая работа, которая, насколько мне известно, не выполнялась в Ruby. Так что либо у вас много впереди, либо вы можете использовать библиотеку bittorrent, написанную на другом языке (например, libtorrent), или взаимодействовать с клиентом, предоставляющим веб-службу (например, передачу).
person
the8472
schedule
15.11.2012