LINUX.ORG.RU

Сообщения kola

 

RESTinio-0.4.3 с поддержкой sendfile

Форум — Development

Мы обновили свою легковесную C++14 библиотеку для встраивания HTTP-входа в C++ приложения до версии 0.4.3.

Основные изменения в RESTinio со времени последнего анонса:

  • новые варианты restinio::run(), позволяющие задать внешний asio::io_context для RESTinio;
  • добавлена поддержка sendfile (https://stiffstream.com/en/docs/restinio/0.4/sendfile.html);
  • request_id теперь доступен внутри обработчика входящего HTTP-запроса;
  • плюс несколько мелких изменений и улучшений в коде самого RESTinio.

Библиотека живет на bitbucket-е (https://bitbucket.org/sobjectizerteam/restinio-0.4) c зеркалом на github-е (https://github.com/Stiffstream/restinio), документация доступна у нас на сайте (https://stiffstream.com/en/docs/restinio/0.4/). Распространяется под BSD-3-CLAUSE лицензией.

Мы создавали RESTinio для того, чтобы иметь возможность асинхронной обработки входящих запросов в случаях, когда для формирования ответа нужно обратиться к медленно отвечающему стороннему сервису. Иногда обращения к таким сторонним сервисам нужно делать посредством HTTP. Для таких целей широко используется Си-шная библиотека libcurl. Подружить асинхронную обработку входящих запросов посредством RESTinio с асинхронной обработкой исходящих запросов посредством libcurl можно несколькими способами. Подробнее эту тему мой коллега раскрыл в небольшой серии статей: часть 1, часть 2, часть 3.

Развитие RESTinio продолжается. У нас есть свои идеи о том, что можно было бы добавить в следующих версиях библиотеки. Но нам было бы очень интересно услышать пожелания от тех, кто смотрел на RESTinio, но еще не начал её использовать:

  • что бы вам хотелось увидеть в RESTinio?
  • чего не хотелось бы видеть?
  • что останавливает вас от использования RESTinio?

 ,

kola
()

RESTinio: header-only, кросс-платформенная библиотека для встраивания HTTP сервера с удобным express-like маршрутизатором

Форум — Development

RESTinio - это header-only, кросс-платформенный инструмент для встраивания HTTP сервера с удобным express-like маршрутизатором и вебсокетами. Главная задачей RESTinio является упрощение асинхронной обработки запросов. Чтобы, грубо говоря, обработчик спокойно мог потратить 15 секунд на формирование ответа, но это бы не влияло на параллельные запросы.

RESTinio с самого начала создавался так, чтобы его с одной стороны было удобно использовать, а с другой, чтобы он был производительным и масштабируемым. RESTinio с самого начала написан с использованием C++14.

Вот как будет выглядеть простейший http-сервер, который отвечает на все запросы hello-world сообщением:

#include <restinio/all.hpp>

int main()
{
  restinio::run(
    restinio::on_this_thread()
      .port(8080)
      .address("localhost")
      .request_handler([](auto req) {
        return req->create_response().set_body("Hello, World!").done();
      }));

  return 0;
}

В данном примере обработчик запросов предельно прост, но, конечно, RESTinio дает доступ ко всем параметрам запроса, что позволяет делать более сложные обработчики.

Возможности:

  • Асинхронная обработка запросов. В случаях, когда данные для ответа на запрос не могут быть получены сразу (или почти сразу), то можно сохранить хэндл запроса для дальнейшей обработки (например, в другом контексте исполнения) и вернуться к этому запросу, когда все данные будут готовы.
  • HTTP pipelining. Хорошо работает в связке с асинхронной обработкой запросов.
  • Контроль за таймаутами. RESTinio может помочь в обработке “плохих” соединений, например из которых приходит «GET /», а затем они просто висят.
  • Построители ответов. Например, если нужно тело chunked-encoding, то в RESTinio есть и такой билдер.
  • Express-like маршрутизатор. Нужно создать нетривиальное REST API со множеством маршрутов, в которых к тому же заключены параметры? Просто возьмите RESTinio с express-like маршрутизатором, который создан по мотивам известного js-фрэймворка.
  • Поддержка TLS (HTTPS).
  • Базовая поддержка websocket. При помощи restinio::websocket::basic::upgrade() можно начать websocket сессию используя соединение, в котором был получен исходный upgrade-запрос.
  • Может быть запущен на стороннем asio::io_context. RESTinio отделен от контекста исполнения, что, например, позволяет запустить 2 сервера используя один asio::io_context или встраивать RESTinio в существующее приложение построенное на ASIO и для этого не потребуется отдельный io_context.
  • Некоторые настройки для оптимизации. Можно задать дополнительные опции для акцептора и сокета. Если RESTinio работает на пуле, то можно задать чтобы соединения принимались параллельно и/или создание внутренних объектов для работы с соединением создавались отдельно, это позволит быстрее принимать новые соединения.

RESTinio для своей работы использует standalone версию ASIO, а также ряд других хорошо известных open-source библиотек (nodejs/http-parser и fmtlib), а также catch2 для тестов.

RESTinio-0.4 можно рассматривать как стабильную бета версию.

Репозиторий проекта: https://bitbucket.org/sobjectizerteam/restinio-0.4

Документация: https://stiffstream.com/en/docs/restinio/0.4

Взгляд со стороны, пожелания, предложения и конструктивная критика приветствуются!

 ,

kola
()

Библиотеки для работы c реляционными БД в C++?

Форум — Development

Добрый день.

Уверен, что многие С++ разработчики сталкивались с необходимостью работать с реляционными БД (Oracle, MSSQL, Postgres, MySQL и т.д.). Хотелось бы узнать про ваш опыт работы с БД в реальных проектах. Какие библиотеки (или иные инструменты) вы использовали для работы РСУБД?

 ,

kola
()

RESTinio: небольшая header-only библиотка для асинхронного REST API на C++

Форум — Development

Некоторое время назад мы столкнулись с задачей создания REST API для старой C++ софтины. Особенность была в том, что обработка одного запроса могла занимать секунды, а то и десятки секунд. Мы посмотрели на то, что есть вокруг, остались не сильно довольны и попробовали сделать свое маленькое, кросс-платформенное, header-only, асинхронное решение. Так мы начали делать RESTinio и вот первая публичная альфа-версия.

Если вы разрабатываете REST сервисы на C++, то что вам нравится и чего не хватает в существующих библиотеках (Beast, C++REST SDK, Crow, restbed, proxygen,...)?

Репозиторий: https://bitbucket.org/sobjectizerteam/restinio-0.1

 

kola
()

RSS подписка на новые темы