我正在打开与远程服务器的长期连接。服务器在此连接中向我发送了很长时间的更新。因此,我没有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 对象析构函数调用,并且它的所有成员都保持活动状态。
问题是:这是完成该任务的正确方法,还是有更好的解决方案?