根据手册(https://php.net/pg_ping):
pg_ping() pings a database connection and tries to reconnect it if it is broken.
Aaaalright ...那有人去哪儿呢?这是长达数小时的循环,而(1)循环很少进行查询吗?超时通常多长时间?为什么根本没有超时?我应该更改一些设置吗?我不了解此功能的目的。对于何时使用它或为什么使用,我找不到任何明智的示例或解释。
请解释。
答案 0 :(得分:0)
首先,一个实际的答案:
该功能可以测试连接是否仍处于活动状态。目的是测试可能闲置了一段时间的连接,例如您刚刚从连接池中获取的连接。
目的是使在紧随其后的数据库请求期间失败的风险降到最低。
有根据的答案:
这个概念是不明智的,您认为它存在问题的理由是合理的。
有两个问题:
竞争条件。即使不太可能,在您测试它和使用它之间的连接仍然可能会变坏。
因此,如果您要编写健壮的代码,则 still 必须为使用数据库连接的实例中的连接失败做出规定(重试,不要让错误立即传播给用户,。 ..)
在连接仍然可能良好的情况下,您将招致不必要的客户端-服务器往返费用,这是您必须为每个数据库请求支付的费用。
因此,最好遵循“先尝试,后道歉”的原则:不要使用这种功能。而是继续执行您实际打算执行的数据库请求,捕获任何错误,如果存在表明连接断开的错误,请重新建立连接并重试。您的代码将变得更加简单和强大。
我根本不会在数据库连接上设置任何超时。而是使用为您管理连接池的连接池。它将保持一些连接以预期数据库活动,并在一定的空闲时间后关闭额外的连接。