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

Надеюсь, что сам код проекта поможет вам лучше понять возможности и сценарии применения библиотеки.
Функционал rats-search уже сейчас предлагает широкие возможности:
Поиск: Искать можно не только по названиям раздач, но и по их содержимому (конкретным файлам внутри торрента).
Загрузка: Скачивать файлы можно как через встроенный клиент, так и передавать их во внешние программы, например, в qBittorrent.
Режимы работы: Приложение поддерживает как классический графический интерф��йс (GUI), так и консольный режим (Headless) с управлением через REST API.
Фильтрация: Предусмотрена гибкая система фильтров, включая возможность скрытия контента для взрослых (Adult-фильтр).
В ближайших обновлениях вернутся модули для обогащения раздач метаданными с внешних источников, в том числе с рутрекера.
Актуальная сборка уже доступна для Linux и Windows. Возврат поддержки macOS запланирована в версии 2.1.x.
Всем спасибо за внимание ;-)
