Всем привет! Я продолжаю развивать свою библиотеку для создания распределённых приложений, которая уже легла в основу новой версии 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.

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