1

根据手册(https://php.net/pg_ping):

pg_ping() pings a database connection and tries to reconnect it if it is broken.

Aaaalright...那么,一个人会在哪里做到这一点?这是几个小时长的 while (1) 循环,很少进行查询吗?超时时间一般是多久?为什么会有超时?我应该更改一些设置吗?我不明白这个特性/功能的目的。我找不到任何关于何时使用或为什么使用它的合理示例或解释。

请解释。

4

1 回答 1

0

首先,一个实际的答案:

该功能用于测试连接是否仍处于活动状态。目的是测试一个可能已经空闲一段时间的连接,例如您刚刚从连接池中抓取的连接。

目的是在紧随其后的数据库请求期间将失败的风险降至最低。

一个自以为是的答案:

这个概念是不明智的,你觉得它有问题是有道理的。

有两个问题:

  1. 比赛条件。即使不太可能,在您测试它和使用它之间,连接仍然会变坏。

    所以如果你想编写健壮的代码,你仍然需要为使用数据库连接的cide中的连接失败做准备(重试,不要让错误立即传播给用户,...)

  2. 在连接仍然正常的可能情况下,您会产生不必要的客户端-服务器往返成本,这是您必须为每个数据库请求支付的成本。

    因此,最好遵循“先尝试,后道歉”的原则:不要像这样使用 uae 功能。相反,继续执行您实际打算执行的数据库请求,捕获任何错误,如果有错误表明连接断开,请重新建立并重试。您的代码将变得更简单、更健壮。

我根本不会在数据库连接上设置任何超时。相反,请使用为您管理它的连接池。它将保留一些连接以预期数据库活动,并在一定的空闲时间后关闭额外的连接。

于 2019-06-03T06:35:47.193 回答