Всем привет! Я продолжаю развивать свою библиотеку для распределённых приложений, которая станет новым ядром поисковика rats-search.
Она поможет вам построить собственную P2P-сеть и связать участников, где все участники будут найдены автоматически, что крайне актуально на фоне различных блокировок. Накопилось много приятных изменений, о которых я и хочу рассказать.
https://habr.com/ru/articles/943652/
Для начала крайне рекомендую ознакомиться с прошлой статьей. В ней я рассказываю, что это за библиотека, и объясняю, почему задумывал librats как альтернативу libp2p. И даю примеры кода для использования.
Последний стабильный релиз на данный момент — 0.5.3. Библиотека в бинарном виде и исходном коде доступна под:
Windows (64-bit)
Linux (64-bit)
Android (32-bit / 64-bit)
macOS (64-bit)
https://github.com/librats/librats/releases

Одно из ключевых изменений — завершена работа над поддержкой Node.js. Теперь библиотеку можно полноценно использовать в Node.js, Python и на Android.
Основной интерфейс доступа — FFI. В отличие от libp2p, где реализации на разных языках часто отличаются возможностями, librats предоставляет единый API и полный набор функций везде. Больше нет ситуаций, когда, например, mDNS на одном языке работает, а на другом — нет.


Ещё одно ключевое изменение — значительная оптимизация работы DHT. Я серьезно доработал алгоритмы обнаружения узлов, внедрив поддержку таких механизмов, как branch-factor и RTT-routing (маршрутизация с учетом задержек).
Теперь таблицы маршрутизации, как и списки пиров, сохраняются между сессиями. Это позволяет эффективно выстраивать топологию сети и находить участников даже в условиях жестких блокировок при заблокированных bootstrap-узлах.
Само анонсирование своего протокола и поиск участников стал значительно быстрее и совмещено с поиском пиров.
С точки зрения поиска пиров, все осталось как раньше:
if (!ratsClient_->start()) {
qWarning() << "Failed to start librats client";
emit error("Failed to start P2P network");
return false;
}
// Start DHT discovery on specified port
if (ratsClient_->start_dht_discovery(dhtPort_)) {
qInfo() << "DHT discovery started on port" << dhtPort_;
} else {
qWarning() << "Failed to start DHT discovery";
}
Серьезно доработан модуль протокола BitTorrent — теперь он функционирует гораздо стабильнее и эффективнее.
И, наконец, о примерах. В прошлый раз читатели спрашивали, есть ли реальные кейсы использования помимо сэмплов самой библиотеки. Отвечаю: загляните в https://github.com/librats/rats-search/commits/cpp/ . Там сейчас находится будущая версия rats-search 2.0, полностью переписанная на Qt с использованием librats.

Ну и конечно различные функции можно просто потыкать из самого консольного клиента (доступно через команду help):

Всем спасибо за внимание :-)
Комментарии (4)

MikeFFFF
13.12.2025 15:59а возможно ли использование librats как заменитель https://gitlab.com/Monsterovich/lanemu или https://yggdrasil-network.github.io/ ?

DEgITx Автор
13.12.2025 15:59Навскидку почитал, думаю в каком-то смысле проект ближе к yggdrasil, он так же позволяет создавать свои mesh сети с шифрованием и участниками - так что для него думаю да, является заменой или альтернативой. Lanemu по описанию некоторые выстраивание VPN туннелей поверх сетей - в librats vpn не используется, коммуникация выстраивается поверх низкоуровневых протоколов tcp/udp
если кратко то топология такая:
Протокол TCP -> шифрование -> librats коммуникация (пакеты) -> протоколы обмена (евенты и gossipsub) -> обмен файлами и другие высокоуровневые функции
Протокол UDP -> DHT/mDNS -> обнаружение участников и routing таблицы -> соединение с участниками
Важной особенностью librats еще является то что он умеет для маршутизации переиспользовать bittorrent сеть ( BitTorrent Mainline DHT - около 16-28 миллионов узлов) ускоряя поиск участников и дополняя сеть. Это более обширная DHT сеть, и думаю самая большая из имеющихся.
Вообще в целом библиотека с учетом наличия gossipsub вполне может подойти для выстраивания неблокируемых месседжеров, где все участники служат proxy-механизмами :)
MAXH0
Интересно. Вы не могли бы описать минимальный рабочий сценарий. Например в следующей статье. Или кинуть ссылку где он описан. Например связать два и более браузерных приложения или программы на python.
DEgITx Автор
В прошлой статье как раз делился базовыми примерами на C++ чтук 6-7 базовых на русском - https://github.com/librats/librats / https://librats.com/ от простых к более сложным, так же они в самом readme есть на английском (секция Quick Start). Но вообще это хорошая идея, может действительно стоит отдельной статьей или видео где будет "создаем клиент" шаг за шагом описано какие функции мы вызываем и показать как клиенты друг с другом соединяются, общаются, что-то передают со скриншотами на каждом этапе создания с пояснениями что и зачем. Есть в планах улучшить и документацию и примеры. Единственное что наверное надо будет как-то дублировать примеры и на разных языках, включая python :).