gpt4 book ai didi

c++ - 几个小时后如何检查连接是否仍然有效?

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:35 26 4
gpt4 key购买 nike

我有一个永远运行的工作线程,连接到 postgresql 数据库(在 C++ 中使用 libpqxx)

#include <pqxx/connection>

// later in code on starting thread only once executed
connection* conn= conn = new connection(createConnectionString(this->database, this->port, this->username, this->password));

如何在几个小时后检查连接是否仍然有效,例如,如果我同时 restrt postgre 服务器(工作线程仍在运行并且没有重新启动)我应该在尝试执行新查询时检查它是否仍然有效并且如果没有,请重新连接。如何知道它是否还活着?

最佳答案

How to check if connection is still active couple hours later

不要。

就用它,就好像它是活的一样。如果因为出现问题而抛出异常,则捕获异常并重试从头开始失败的事务。

“测试”连接或“验证”连接的尝试注定要失败。存在一种固有的竞争条件,连接可能在验证和实际使用之间消失。因此,无论如何您都必须正确处理异常 - 此时首先进行连接验证是没有意义的。

由于多种原因,查询可能会失败并且事务可能会中止。因此,您的应用程序必须始终在检测可能的 transient 故障情况的重试循环中执行事务。这只是一种可能性 - 您还可以让管理员取消查询、死锁检测器中止事务、序列化失败取消事务等。

为避免不需要的低级别 TCP 超时,您可以在服务器端或客户端的连接上设置 TCP keepalive。

如果您确实坚持这样做,知道这是错误的,只需发出一个空查询,即 ""

关于c++ - 几个小时后如何检查连接是否仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com