我想使用boost :: beast来读写etcd。首先,我希望能够使用these examples做增强兽。它们很容易卷曲。 Etcd可以看作是键/值存储。使用boost::beast client example可以轻松完成设置/获取的功能(示例页面中的放置/范围)。那里没问题。
但是“看”,我听不懂。根据{{3}},观看是连续不断的,不同于其他会话,这些会话在检索结果后立即终止。卷曲示例显示了在手表仍处于活动状态时实时更改值和响应的情况。我应该使用相同的流来执行与该手表相关的所有操作,包括停止手表。
我的问题大致是:如何在boost :: beast 中实现它?
假设docs中带有
std::thread t(&std::iocontext::run, &ioc);
t.detach();
现在,我可以在主线程中完全控制客户端。我是否应该创建新的http请求并通过套接字对象在async_write
中提交它们?但是,如果这样做,我就会失去用boost :: beast来包装漂亮的http::request<http::string_body>
HTTP标头的功能。我应该手动创建标题吗?还是我应该只发送带有某种行终止符的json
来指示消息已结束?通信协议是什么样的?
一个带有boost :: beast的例子会很棒。
答案 0 :(得分:1)
etcd似乎使用了“长时间运行的请求”。为此,您想使用http::read_header
[1]或http::async_read_header
[2]获取响应头,然后使用http::read_some
[3]或http::async_read_some
[4]循环读取响应主体的各个部分。为了使它正常工作,您想要使用专为这种事情设计的http::buffer_body
[5]。文档中的HTTP中继示例[6]演示了buffer_body
的用法,并且可以适用于处理长时间运行的请求。