librats: Выпуск версии 0.5.x. Ускорение поиска пиров, алгоритм spider, поддержка JavaScript, Python…
- воскресенье, 14 декабря 2025 г. в 00:00:04
Всем привет! Я продолжаю развивать свою библиотеку для распределённых приложений, которая станет новым ядром поисковика 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):

Всем спасибо за внимание :).