从 http 流中读取和写入有什么要求(在 boost::beast 中)?
What are the requirements to read and write from an http stream (in boost::beast)?
我想使用 boost::beast 来读取和写入 etcd。首先,我希望能够用助推兽来做这些例子。它们很容易用卷发来做。etcd 可以看作是一个键/值存储。设置/获取的函数(示例页面中的放置/范围)很容易使用 boost::beast 客户端示例。那里没有问题。
但是"看",我不明白。根据文档,观看是一个连续的流,不像其他会话是在检索结果后立即死亡的会话。卷曲示例显示了在手表仍处于活动状态时更改值和现场响应。我应该使用相同的流来执行与该手表相关的所有操作,包括停止它。
我的问题是:如何在boost::beast中实现这一点?
假设从客户端示例中,我通过一个线程提交ioc.run
std::thread t(&std::iocontext::run, &ioc);
t.detach();
现在我可以完全控制主线程中的客户端。我是否应该创建新的 http 请求并通过套接字对象以async_write
提交它们?但是如果我这样做,我就会失去 boost::beast 的功能,即用漂亮的http::request<http::string_body>
包装 http 标头。我应该手动创建标题吗?还是我应该只发送带有某种行终止符的json
来指示消息已结束?通信协议是什么样的?
一个带有boost::beast的例子会很棒。
看起来 etcd 使用"长时间运行的请求"。为此,您希望使用http::read_header
[1] 或http::async_read_header
[2] 来获取响应标头,然后在循环中使用http::read_some
[3] 或http::async_read_some
[4] 来读取响应正文的部分内容。为了干净地工作,您需要使用专为此类事情设计的http::buffer_body
[5]。文档中的HTTP Relay示例[6]演示了buffer_body
的使用,并且可以适应处理长时间运行的请求。
[1] https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__read_header/overload2.html
[2] https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__async_read_header.html
[3] https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__read_some/overload2.html
{4] https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__async_read_some.html
[5] https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__buffer_body.html
[6] https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/more_examples/http_relay.html
- 如何在boost beast http请求中设置http头
- 带有 Boost.Beast 的异步读取标头
- 如何使用 boost beast websocket 客户端收听 websocket feed?
- Boost (Beast) websocket:同步写入挂起
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- Boost Beast 异步服务器失败,断言失败:(id_ != T::id) 在多个 aync 调用中
- boost beast Websocket Multi Request Server/Client 并不是真正的 mul
- "Body requirements not met"将 req 传递给 c++ 中的方法(Boost Beast 库)
- Websocket 客户端在 C++ 中使用 boost::Beast - 在写入操作时抛出错误
- 断开连接后重新连接boost beast(asio)websocket和http连接时出错
- 为什么Boost Variant使用模板构造函数而不是Boost::beast::websocket::stream的移
- boost beast websocket服务器也接受http连接
- 我可以使用 Boost.Asio 和 Boost.Beast 库发出 HTTPS 请求或 HTTP/2 请求吗?
- Boost::Beast Websocket Bidirection Stream (C++)
- 如何在 Boost::Beast 上继续使用 websocket?
- Cmake忽略了我所有关于在boost::beast存储库中在哪里找到提升的指令
- Boost-Beast 异步 Web 套接字 服务器-客户端异步读写 不在控制台上写入输出
- boost :: Beast Sync http客户端的超时
- 使用带有SSL(HTTPS)的Boost-Beast(ASIO)HTTP客户端
- 通过boost::beast设计具有不同订阅费率的多个订阅