如何在cpp-netlib中没有“Connection:close”标头正确等待异步http请求?

时间:2017-12-05 03:53:03

标签: c++ boost cpp-netlib

我正在与远程服务器建立长期连接。服务器长时间向我发送此连接中的更新。因此,我不会在我的请求中使用cpp-netlib docs中建议的Connection: close标头。我使用流体处理程序来处理服务器数据:http://cpp-netlib.org/0.12.0/reference/http_client.html#streaming-body-handler

http连接生存期线程在http客户端对象析构函数中执行join调用:

  

当客户端对象被销毁时,它会等待所有挂起的对象   异步操作完成。

当我的流体处理程序访问已经被破坏的数据时,我遇到了这种行为的问题。

我有一个解决方法,当它对我来说是安全的时,显式调用http客户端析构函数来执行thread.join

class MyClient {
    std::shared_ptr<http::client> client_;
    std::string this_member_would_be_destroyed_before_the__client_;
};

int main() {
    MyClient client;
    client.join();
}

void MyClient::join() {
    client_.reset(new http::client);
}

这样做我避免了MyClient对象析构函数调用,并且所有成员都保持活动状态。

问题:这是完成该任务的正确方法,还是有更好的解决方案?

0 个答案:

没有答案