javascript

librats: Выпуск версии 0.5.x. Ускорение поиска пиров, алгоритм spider, поддержка JavaScript, Python…

  • воскресенье, 14 декабря 2025 г. в 00:00:04
https://habr.com/ru/articles/976366/

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

старая версия rats-search
старая версия rats-search

Одно из ключевых изменений — завершена работа над поддержкой 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):

справка для консольного клиента из librats
справка для консольного клиента из librats

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