1

我正在打开与远程服务器的长期连接。服务器在此连接中向我发送了很长时间的更新。因此,我没有Connection: close按照我的请求中的 cpp-netlib 文档中的建议使用标头。我使用流式主体处理程序来处理服务器数据:http ://cpp-netlib.org/0.12.0/reference/http_client.html#streaming-body-handler 。

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

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

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

我有一个解决方法来显式调用 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 对象析构函数调用,并且它的所有成员都保持活动状态。

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

4

0 回答 0