- comment 0:
From: kmeaw
Date: 2022-11-26 10:46:55Z
> у меня в руках клиент написанный на Go
Если речь про 99545affc42b3298475f3efb7c1fb33db114529b, то стоит быть
аккуратным - этот клиент не умеет раздавать, ожидает от (HTTP-only)
трекера поддержку compact-формата и всегда анонсирует
download=0&upload=0. Такая комбинация особенностей может привести к бану
на трекере.
Ещё часть трекеров сломаются, потому что метод
TorrentFile.buildTrackerURL перезаписывает RawQuery, а туда часто кладут
passkey (?uk=AAAAAAAAAA). Некоторые трекеры также ожидают увидеть в
query-параметрах помимо port ещё и ip/ipv6.
Некоторые трекеры реализуют syncookie-подобную защиту, отвечая клиенту
строкой типа "d14:failure reason10:greylisted8:retry in1:1e" - нужно
уметь обрабатывать ошибки. А иногда отвечают 301 редиректом.
Останется дописать поддержку UDP-трекеров, WebTorrent, перезапрос peers
с трекера (но не чаще, чем раз в interval, иначе забанят), DHT (но с
обработкой private flag, тут тоже могут забанить), peers6 для случая
compact с IPv6, uTP. И, самое сложное, раздачу - пиры могут вести себя
странно и плохо, и надо уметь банить их на своей стороне - трекер тут
ничем не поможе.
- comment 1:
From: kmeaw
Date: 2022-11-26 10:51:38Z
Прочитал следующую запись в блоге
(8357328821a1a6859a268197a618554b875a87c6) и понял, что был не прав в
своём предположении. Тогда все описанные мной проблемы уже решены.
- comment 2:
From: Sergey Matveev
Date: 2022-11-26 11:02:03Z
Всё что касается трэкеров меня не сильно волнует. Так как массово все
полагаются на DHT для обнаружения peer-ов. Ну судя по моему опыту. А
на приватных трэкерах я был в последний раз наверное ещё до 2010-х.
Мне не нравится например что он не отправляет трэкеру сообщение о том,
что отключается, когда его останавливают. Конечно на трэкере по
timeout-у мой peer всё равно вычистят, но было бы честнее сообщать.
Ну и да, почти (то что я точно видел в коде и могу оценить) всё что вы
написали -- реализовано. Более того, в документации не упоминается DHT
IPv6 поддержка, но которую я вижу в их dht реализации, которая идёт
отдельной библиотекой.
- comment 3:
From: Sergey Matveev
Date: 2022-11-26 11:07:25Z
*** kmeaw [2022-11-26 10:46]:
>WebTorrent
А вот это я кстати вообще полностью выпилил. Ну не нравятся мне WebRTC и
WebSocket и всё что с ними связано :-). На треть сокращает размер бинарника
из-за этого.