【发布时间】:2019-10-25 10:23:24
【问题描述】:
我遇到过对于 Beast 来说太大的分块响应的情况,我想在到达 Beast 的 body_limit 之前停下来,然后使用普通的 boost::asio 继续处理该消息。请注意,这(显然)意味着我已经收到了标题和大部分正文。
我将它用于反向代理,所以基本上我想做的是以某种方式将不完整的响应发送到 http 客户端,同时继续使用 boost::asio 中继剩余的响应数据。
我猜我需要以某种方式序列化不完整的响应,可能使用 operator<< 到 std::stringstream,使用 boost::asio 将其发送到客户端,然后从那里继续通信。
这行得通吗?这是这样做的正确方法,还是有更好的方法,甚至可能使用野兽 api?有没有另一种方法来处理野兽的api中即将超过body_limit的分块消息?
提前致谢, 大卫。
更新
我终于放弃了回退到 boost asio 的想法,现在正尝试用固定大小的缓冲区以块的形式接收 http 消息(分块或常规),这样我就不会达到正文限制。我刚刚浏览完Receive/parse the message body one chunk at a time · Issue #154 · boostorg/beast,看来这正是我所需要的。我也在尝试实现反向代理。我尝试使用Incremental Read ???? - 1.70.0,但在尝试编译此行时出现Reference to non-static member function must be called 错误:
ctx->response.get().body().data = response_buffer;
也许增量读取示例页面未使用最新语法更新?您有与我正在尝试编写的反向代理相关的示例吗?
提前致谢, 大卫
【问题讨论】:
标签: c++ http boost boost-asio boost-beast