根据查询的路由使用不同的请求解析器
using different request parser depending on the queried route
我正在使用 boost beast 实现一个迷你 http 服务器。服务器有两个不同的路由 POST /upload/... 另一个是 POST /info。第一个用于上传一些大文件,另一个用于处理 json objects。为了尽可能保持性能,我尝试使用合适的解析器 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();
});
不过好像不行。
有什么方法可以根据 header 信息使用不同的请求主体吗?
非常感谢
这应该包含在文档中,但这里是如何做到的:使用类型 beast::request_parser<beast::empty_body>
首先阅读 header,然后根据 header 的内容你 move-construct 从旧的解析器中得到一个新的解析器,具有你想要的 body 类型。示例:
// Deferred body type commitment
request_parser<empty_body> req0;
...
request_parser<string_body> req{std::move(req0)};
您可以在此处阅读有关切换 body 类型的完整文档:
https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__parser/parser/overload5.html
我正在使用 boost beast 实现一个迷你 http 服务器。服务器有两个不同的路由 POST /upload/... 另一个是 POST /info。第一个用于上传一些大文件,另一个用于处理 json objects。为了尽可能保持性能,我尝试使用合适的解析器 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();
});
不过好像不行。
有什么方法可以根据 header 信息使用不同的请求主体吗?
非常感谢
这应该包含在文档中,但这里是如何做到的:使用类型 beast::request_parser<beast::empty_body>
首先阅读 header,然后根据 header 的内容你 move-construct 从旧的解析器中得到一个新的解析器,具有你想要的 body 类型。示例:
// Deferred body type commitment
request_parser<empty_body> req0;
...
request_parser<string_body> req{std::move(req0)};
您可以在此处阅读有关切换 body 类型的完整文档: https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__parser/parser/overload5.html