1

我们正在使用一个应用程序服务器来提供我们的数据。

有时与应用服务器的连接需要很长时间才能响应,但实际上并没有连接失败(即使连接成功,速度也会在 pingdom 上记录为停机时间)

如何在 php 中计时连接,以便在一定时间后记录响应缓慢的事件(即使连接尚未响应)?

4

2 回答 2

1

好吧,尽管如此,我必须同意 eis 关于这一点。PHP 可能不是最好的语言,这是我的建议......

第一个文件:

//Write "1" to text file (loading.txt)
//Run secondary php file (loading.php) asyncronously
//I would suggest curl_post_async or exec(url)

//Start Connection

//Upon load finish write "0" to text file (loading.txt)

这是关于请求页面而不等待加载的一个很好的讨论: php request url without waiting for response

第二个文件(loading.php):

$start=mktime();
while (true) {
    if ("loading.txt" if value = 0) {
        break;
    else if (($start-mktime()) > MAX WAIT TIME) {
        //Log as "slow-to-respond"
        break;
    }
}

您可能需要修改 php.ini 并相应地设置最大执行时间。

我再次觉得这有点草率。我真的建议使用其他语言。

基本上,在您开始连接之前,您运行另一个 php 文件,该文件将继续循环,直到 1. 它从 loading.txt 文件中读取您已完成连接或 2. 您已准备好将其记录为“反应迟钝”的例子。在这种情况下,第二个 php 文件结束并且您已经达到了您想要的结果。

于 2012-08-01T16:35:47.240 回答
1

一个想法浮现在我的脑海。在请求开始时,您可以设置一个数据库条目或包含您提出的请求的文件,类似于Rawr 提出的建议。然后,您可以在超过限制后从 PHP 触发 unix at 命令运行 - 然后该命令将激活 shell 或 PHP 脚本,该脚本将检查文件/数据库条目的存在并采取相应措施。

这同样是 hacky,但它的好处是不需要一直运行额外的脚本和轮询内容,而是只激活一次。

于 2012-08-01T17:00:02.517 回答