использование разного анализатора запросов в зависимости от запрашиваемого маршрута - PullRequest
0 голосов
/ 11 февраля 2019

Я внедряю мини-http-сервер, используя boost beast.на сервере есть два разных маршрута POST / upload / ... а другой - POST / info .Первый используется для загрузки некоторых больших файлов, а второй - для хедлинговых объектов json.Чтобы сохранить производительность как можно выше, я пытаюсь проанализировать каждый маршрут с подходящим синтаксическим анализатором file_body и string_body / dynamic_body.Я надеялся, что можно сделать что-то вроде:

http::async_read_header(
            socket_,
            buffer_,
            request_,
            [self](beast::error_code ec, std::size_t)
            {
                if (!ec)
                    self->request_.body().data();
            });

, но это кажется невозможным.

Можно ли использовать разные тела запроса в зависимости от информации заголовка?

Большое спасибо заранее

1 Ответ

0 голосов
/ 12 февраля 2019

Это должно быть рассмотрено в документации, но вот как это сделать: используйте тип beast::request_parser<beast::empty_body>, чтобы сначала прочитать заголовок, а затем, в зависимости от содержимого заголовка, вы создаете новый синтаксический анализатор из старого стип телосложения вы хотите.Пример:

// Deferred body type commitment
request_parser<empty_body> req0;
...
request_parser<string_body> req{std::move(req0)};

С полной документацией по типам переключающихся тел можно ознакомиться здесь: https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__parser/parser/overload5.html

...