Boost Beast异步HTTP客户端+ std :: future

时间:2019-03-03 15:16:24

标签: c++ promise boost-asio future boost-beast

我有一个项目,它将进行一些联网,并希望将底层的Boost Beast HTTP(S)请求实现包装在期货中。

我从https://www.boost.org/doc/libs/1_69_0/libs/beast/example/http/client/async-ssl/http_client_async_ssl.cpp复制了session类,并想将session::run()的返回类型更改为std::future<http::response<http::string_body>>。另外,将位置// Write the message to standard out更改为在promise中设置结果,而不是打印。

问题是:

  • 将用于产生未来的承诺放在何处?班级成员是正确的选择吗?
  • boost::asio::io_context ioc放在哪里?它是否应该在我自己的应用程序的核心循环中(假设该应用程序将在其生存期内触发多个请求),然后在发出请求时将引用传递给ioc ioc.run()怎么样? -我需要它不断运行,是否应该打开一个专用线程来运行ioc以避免阻塞?
  • 如何处理session错误?我想使用std::promise接口,并在出现问题的情况下放置一个异常-基本上将示例中对fail()的所有调用替换为适当的异常。但是我不能只是将异常对象放入承诺中,它期望std::exception_ptr-我是否应该立即抛出并立即捕获并放入std::current_exception()?对我来说这似乎是一个坏习惯。
  • 如果我没有在程序中显式创建任何线程,这项工作会成功吗?如果不是,那么查询session对象所有任务是否已完成的好方法是什么?

编辑:添加了有关ioc(粗体)的进一步问题

0 个答案:

没有答案