3

我有一个项目将进行一些网络连接,并希望将底层 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该类,并希望将返回类型更改为. 另外,将位置更改为在 Promise中设置结果而不是打印。session::run()std::future<http::response<http::string_body>>// Write the message to standard out

问题是:

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

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

4

0 回答 0