Всем привет! Я продолжаю развивать свою библиотеку для создания распределённых приложений, которая уже легла в основу новой версии rats-search (распределенного торрент-поисковика).

Она позволяет развернуть собственную P2P-сеть и связать пользователей между собой. Главная особенность — автоматическое обнаружение участников (peer discovery), что крайне актуально в условиях постоянных блокировок и ограничений сети.

На данный момент библиотека поддерживает языки C/C++, Android (Java), Python и Node.js.

С момента выхода прошлой статьи накопилось много приятных изменений, о которых я и хочу рассказать. Кроме того, в этот раз я затрону и сам rats-search новой версии.

Последний стабильный релиз на сегодня — 0.7.0. Исходный код и бинарные файлы доступны для скачивания для:

  • Windows (64-bit)

  • Linux (64-bit)

  • Android (32-bit / 64-bit)

  • macOS (64-bit)

https://github.com/librats/librats/releases

Доступ к функционалу библиотеки организован через FFI (Foreign Function Interface).

Это выгодно отличает librats от libp2p где реализации на разных языках часто рассинхронизированы: одна и та же фича может прекрасно работать в версии для Go, но отсутствовать в версии для JavaScript.

Librats гарантирует единый API и полный паритет функций для всех поддерживаемых языков. Больше никаких сюрпризов, когда, например, mDNS работает на одной платформе, но не реализован на другой.

В версии 0.7 значительной переработке подвергся BitTorrent-модуль. Для повышения стабильности и производительности я интегрировал в него ряд проверенных механизмов из библиотеки libtorrent.

Кроме того, был серьезно улучшен модуль шифрования, построенный на базе Noise Protocol Framework. В этой версии он полностью стабилен.

Подробнее о возможностях librats и примеры кода можно почерпнуть из моих прошлых статей. Но в этот раз, вместо сухой теории, я хочу представить вам полноценный open-source проект, построенный на этой библиотеке.


В комментариях к прошлым публикациям меня часто просили показать больше реальных примеров использования. И вот, я стабилизировал новую, вторую версию rats-search (она все еще в beta статусе) - https://github.com/librats/rats-search .

Это распределённый поисковик торрентов. Он автоматически сканирует сеть, собирает метаданные и складывает их в объёмные локальные базы данных. У некоторых пользователей сохранились базы на несколько миллионов раздач, собранные еще первой версией программы. Ключевая особенность в том, что все эти базы объединяются через P2P-сеть и становятся доступны даже «свежим» участникам, только подключившимся к системе. Обратная совместимость формата базы данных сохранена с 1.x версией.

Архитектура кратко с крысками
Архитектура кратко с крысками

Отдельно хочется отметить выбор стека технологий. Сейчас наблюдается тренд, когда разработчики массово переписывают свои приложения на Electron. У меня же картина обратная: версия 2.0 была переписана с Electron на Qt (C++).

Это осознанный шаг ради оптимизации. Обмен данными в ключевых нодах идет очень активно, а скорость сбора торрентов со временем только возрастает. В таких условиях эффективность использования памяти и процессора становится критическим фактором, который мне давно хотелось оптимизировать.

Обновленный интерфейс из 2.0. Еще не все идеально но стабилизируется :).
Обновленный интерфейс из 2.0. Еще не все идеально но стабилизируется :).

Надеюсь, что сам код проекта поможет вам лучше понять возможности и сценарии применения библиотеки.

Функционал rats-search уже сейчас предлагает широкие возможности:

  • Поиск: Искать можно не только по названиям раздач, но и по их содержимому (конкретным файлам внутри торрента).

  • Загрузка: Скачивать файлы можно как через встроенный клиент, так и передавать их во внешние программы, например, в qBittorrent.

  • Режимы работы: Приложение поддерживает как классический графический интерфейс (GUI), так и консольный режим (Headless) с управлением через REST API.

  • Фильтрация: Предусмотрена гибкая система фильтров, включая возможность скрытия контента для взрослых (Adult-фильтр).

В ближайших обновлениях вернутся модули для обогащения раздач метаданными с внешних источников, в том числе с рутрекера.

Актуальная сборка уже доступна для Linux и Windows. Возврат поддержки macOS запланирована в версии 2.1.x.

Всем спасибо за внимание ;-)

Комментарии (4)


  1. lev500
    30.01.2026 22:24

    Сканировать сеть в поисках участника системы может быть долго и небезопасно (провайдер может что-то заподозрить). Обычно лучше иметь список "точек входа", которые можно прозвонить и узнать информацию об активных в данный момент участниках сети. (Написал на основе статьи, в код не лез, возможно там реализовано)


    1. DEgITx Автор
      30.01.2026 22:24

      Ну так то вас и за VPN и за торренты и за много чего еще что через провайдер могут косо смотреть, а дойдет ли у них дело до реальных действий это уже вопрос - тут каждый берет риск на себя. Программа распределенная тут участники сети могут брать на себя разные роли. Кто-то зайдет просто поискать, кто-то активно собирает базы.

      С точки зрения трафика во время сбора базы он максимально напоминает типичный bittorrent трафик или dht трафик который используется в очень многих программах - ipfs, блокчейн и т.п., по сути от него он и не отличается, только x10 по количеству - именно в режиме сканирования. Само же общение между клиентами закрытое.


  1. rPman
    30.01.2026 22:24

    Скажите пожалуйста, почему используется бинарник manticore-binary с какого то левого репозитария, если можно спокойно забирать с офф сайта? В добавок используется какая то очень странная версия 9.2.14 при наличии 9.2.100 (а еще логичнее 9.3.2 если там сильно что то поменяли.. ну и последняя версия 15.1.0 для которой бинарники готовые.


    1. DEgITx Автор
      30.01.2026 22:24

      Это с проверенными фиксированными пребилдами. Используется та, что с точки зрения rats-search клиентов считается стабильной и бинарно-совместимой для баз данных. Когда будет слот чтобы проверить новую, тогда обновлю, сейчас пока не приоритетно. Пока решаю массу других нюансов новой версии.

      На практике говорю что у их версия была бинарная несовместимость баз (пример когда было обновление с 2 на 6 версию). В одной из версий приходилось писать патчеры для баз данных чтобы люди не потеряли базы с миллионами торрентов при переходе на новую версию, отсюда и вытекают все сложности. Думаю вопрос станет ближе к 2.1.x релизу.