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

Pao*_*aJ. 2 c++ postgresql libpqxx c++11

我在工作线程中永远运行,连接到 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));
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ger 5

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

不。

只要使用它,就像它是活的一样。如果由于出现问题而引发异常,请捕获该异常并重试从一开始就失败的事务。

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

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

为了避免不必要的低级别 TCP 超时,您可以在服务器端或客户端连接上设置 TCP 保持活动。

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