当发送多个同时请求时,单线程异步系统中Beast Boost异步HTTP客户端的行为

Behaviour of beast boost Async http client in single threaded asynchronous system when multiple simultaneous requests are sent

本文关键字:异步 Boost Beast HTTP 客户端 系统 单线程 请求      更新时间:2023-10-16

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。此问题也解决了同一问题。但是我想它仍然无法解决。