atomashpolskiy / bt

BitTorrent library and client with DHT, magnet links, encryption and more
https://atomashpolskiy.github.io/bt/
Apache License 2.0
2.42k stars 381 forks source link

Some issues #108

Open JustAGod1 opened 5 years ago

JustAGod1 commented 5 years ago

Извиняюсь что на русском, но на английском вряд ли выйдет общение. Суть в том что я использовал вашу библиотеку для создания лаунчера с целью экономии трафика. Либа в целом неплохая, быстрая и относительно удобная, но есть несколько проблем. Может конечно я чего то не понял, но лучше перечислю в порядке убывания критичности

  1. Утечка памяти вот тут. На сколько я понял суть в эти блоки суются загруженные куски которые затем, после валидации, сохраняются в PieceConsumer, а после просто там хранятся. Это весьма критично когда клиент весит 3гб.
  2. Порт маппинг "из коробки" не работает. Может я дурак чего не понял, может не на всех устройствах поддерживается, но простое добавление модуля не помогло. Я использовал эту библиотеку и она решила проблему.
  3. Избирательная загрузка удручает. Если у меня в директории уже был файл больший по размеру, нежели чем я хочу загрузить, перепишется только та часть которая совпадает по размеру с новым, а остальное просто останется без изменений.

Из ошибок(in my humble opinion) все. Дальше идут непонятки и предложения

  1. Я честно так и не понял почему вы не захотели учитывать анонс интервал, который возвращает трекер. Для нас такой подход более удобен, чем указание анонс интервала в конфиге.
  2. Почему вы не захотели учитывать файлы которые уже присутствуют на диске? Весьма сомнительная полезность торрента без этой фичи.
  3. Было б здорово иметь ограничение скорости загрузки/отдачи. Это то без чего не получится использовать эту библиотеку конечным пользователем.

На этом все, извините, если это я опять что то не так понял.

atomashpolskiy commented 5 years ago

Спасибо за фидбек!

Утечка памяти вот тут. На сколько я понял суть в эти блоки суются загруженные куски которые затем, после валидации, сохраняются в PieceConsumer, а после просто там хранятся. Это весьма критично когда клиент весит 3гб.

Я не вижу здесь утечки памяти. PieceConsumer регулярно забирает готовые блоки из своей внутренней очереди здесь.

Порт маппинг "из коробки" не работает. Может я дурак чего не понял, может не на всех устройствах поддерживается, но простое добавление модуля не помогло. Я использовал эту библиотеку и она решила проблему.

Это печально. bt-upnp поддерживает только механизм UPnP посредством либы https://github.com/4thline/cling. В вашем случае, видимо, роутер/прошивка используют другой механизм, например, NAT-PMP. Библиотека, на которую вы дали ссылку, судя по описанию лучше той, которая используется сейчас, так что имеет смысл на нее перейти. Надо создать задачу.

Избирательная загрузка удручает. Если у меня в директории уже был файл больший по размеру, нежели чем я хочу загрузить, перепишется только та часть которая совпадает по размеру с новым, а остальное просто останется без изменений.

Я честно так и не понял почему вы не захотели учитывать анонс интервал, который возвращает трекер. Для нас такой подход более удобен, чем указание анонс интервала в конфиге.

Надо создать задачи на доработку.

Почему вы не захотели учитывать файлы которые уже присутствуют на диске? Весьма сомнительная полезность торрента без этой фичи.

В каком смысле учитывать?

Было б здорово иметь ограничение скорости загрузки/отдачи. Это то без чего не получится использовать эту библиотеку конечным пользователем.

Обсуждается здесь: https://github.com/atomashpolskiy/bt/issues/22

JustAGod1 commented 5 years ago

Я не вижу здесь утечки памяти. PieceConsumer регулярно забирает готовые блоки из своей внутренней очереди здесь.

В определенные моменты в очереди накапливаются довольно большие куски. Так или иначе я не вижу смысла там хранить блоки так как в дальнейшем они совсем не используются.

В каком смысле учитывать?

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

atomashpolskiy commented 5 years ago

В определенные моменты в очереди накапливаются довольно большие куски. Так или иначе я не вижу смысла там хранить блоки так как в дальнейшем они совсем не используются.

Согласен, кажется, что там будет достаточно номеров верифицированных блоков.

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

При запуске торрента содержимое каталога загрузки проверяется для построения битфилда, здесь: https://github.com/atomashpolskiy/bt/blob/master/bt-core/src/main/java/bt/data/DefaultDataDescriptor.java#L125

JustAGod1 commented 5 years ago

При запуске торрента содержимое каталога загрузки проверяется для построения битфилда, здесь: https://github.com/atomashpolskiy/bt/blob/master/bt-core/src/main/java/bt/data/DefaultDataDescriptor.java#L125

Хм, действительно. Я как то умудрился пропустить этот момент.

JustAGod1 commented 5 years ago

Я тут хочу добавить про порт маппинг Все неплохо работает на статических айпишниках, но все плохо на динамичных. Сколько я не тыкался, я не смог найти нормальных вариантов замапить порт через 2 IGD. Так что можно вычеркнуть эту проблему.