当发送多个同时请求时,单线程异步系统中Beast Boost异步HTTP客户端的行为
Behaviour of beast boost Async http client in single threaded asynchronous system when multiple simultaneous requests are sent
当 c 11 在单个螺纹异步系统中提出多个同时请求时,Beast beast beast beast boost http client在 c 11 中如何工作?
用例:
我想发送多个同时异步请求,并且我正在为每个请求创建新的HTTP客户端。当收到任何请求的响应时,我正在调用回调函数,在收到的响应1秒后删除客户端以避免任何内存泄漏。但是,即使我为每个请求创建一个新的客户端对象,似乎在随机数的simulatneous http请求之后,系统/代码似乎悬挂在两者之间。Beast Boost是否使用一些共享资源,因为此停顿看起来像系统处于无限僵局中。PS:我还尝试评论此删除块,但系统的行为相同。
以下是Boost和编译器版本的规格:
-
升压:稳定1.68.0
-
boost_beast_version 181
clang -v
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
void sendHttpRequest(){
HttpClient *client = new HttpClient();
deleteClient = [this,client]{
int timeout = 1;
boost::asio::deadline_timer *clientDeleteTimer = new boost::asio::deadline_timer( *this->context);
clientDeleteTimer->expires_from_now(boost::posix_time::seconds(timeout));
clientDeleteTimer->async_wait([client,this,clientDeleteTimer](const boost::system::error_code &ec){
if(ec == boost::asio::error::operation_aborted){
std::cout<<" Operation abortedn"<<std::flush;
return;
}
else{
delete client;
}
delete clientDeleteTimer;
};
callback = [] {
std::cout<<"Response recieved successfullyn"<<std::flush;
deleteClient();
};
errback = [] {
std::cout<<"Response not recieved n"<<std::flush;
deleteClient();
};
client.sendPostRequest(request, callback , errback);
}
以上此功能是一个包装器函数,每个请求都会调用,并在内部创建新的HTTP async客户端并删除该客户端对象在收到响应/错误1秒后(基本上已经处理了请求)。
请访问https://github.com/boostorg/beast/issues/1458。此问题也解决了同一问题。但是我想它仍然无法解决。
相关文章:
- 带有 Boost.Beast 的异步读取标头
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- Boost Beast 异步服务器失败,断言失败:(id_ != T::id) 在多个 aync 调用中
- 调用boost.asio的异步函数时,线程是什么时候创建的
- 如何使用 boost::asio io_service 运行函数异步
- Boost 堆栈跟踪异步信号安全吗?
- Boost-Beast 异步 Web 套接字 服务器-客户端异步读写 不在控制台上写入输出
- 如何使用 Boost.Asio 正确实现异步/等待语法
- Boost asio ip tcp iostream 是否支持异步?
- 使用 boost::beast 异步处理流式 HTTP
- Boost.Asio 异步服务器.限制为一个连接
- 当发送多个同时请求时,单线程异步系统中Beast Boost异步HTTP客户端的行为
- 使用boost :: Beast进行CPU重的REST API,我是否应该使用异步或同步方式来实现它们以期望延迟
- 异步服务器在创建boost :: asio后立即关闭
- 运行 boost::asio 异步服务器以及命令循环
- 程序在使用异步的 Boost.Process 调用 std::future.get() 后挂起
- 异步Boost写入Java套接字-传入的字节数组有时部分为0
- 在异步boost.asio操作中使用std::string时的生存期管理
- 我应该使用阻塞还是异步boost::asio::socket读/写来实现协议握手?