gpt4 book ai didi

c++ - boost::beast 同步 http 客户端超时

转载 作者:行者123 更新时间:2023-11-30 04:46:20 58 4
gpt4 key购买 nike

我正在调整 synchronous HTTP client来自 Boost Beast examples .不幸的是,示例客户端不包括超时选项,有时会卡在我的工作负载中。我尝试用

添加超时
beast::get_lowest_layer(stream).expires_after(NetworkSettings::BASIC_TIMEOUT);

在调用写/读操作之前,但这些操作似乎只在使用 async_read/write 时起作用。 From what I found ,似乎基本的 boost asio 只支持异步操作的超时。所以我的问题是 beast 是否有能力在阻塞的连接/读/写调用上使用超时。

最佳答案

超时不适用于 Asio 中的同步 I/O。由于 Beast 是 asio 之上的一层,它也不支持同步 I/O 的超时。如果你想要超时,你必须使用异步 API。您可以使用堆栈协程,或者如果您有足够现代的编译器,您可以尝试使用无堆栈协程 (co_await)。这些允许您编写看似同步但使用异步接口(interface)的代码。

Beast 文档对此很清楚:“出于可移植性原因,网络不为同步流操作提供超时或取消功能。”

https://www.boost.org/doc/libs/1_70_0/libs/beast/doc/html/beast/using_io/timeouts.html

如果您希望连接操作超时,请使用 beast::tcp_stream 实例并调用 async_connect 成员函数: https://www.boost.org/doc/libs/1_70_0/libs/beast/doc/html/beast/using_io/timeouts.html#beast.using_io.timeouts.connecting

关于c++ - boost::beast 同步 http 客户端超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828654/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com