我们正在使用提供数据的应用服务器。
有时与appserver的连接需要很长时间才能响应,但是没有实际的连接失败(并且慢速注册为pingdom的停机时间,即使连接成功也是如此)
如何在php中对连接进行计时,这样我可以在一段时间后记录缓慢响应的事件(即使连接尚未响应)?
答案 0 :(得分:1)
好吧虽然,我必须同意这个问题。 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文件结束,你已经达到了你想要的结果。
答案 1 :(得分:1)
我的脑子里浮现出一个想法。在请求开始时,您可以设置数据库条目或包含您所做请求的文件,类似于Rawr made的建议。然后,您可以从PHP中触发unix at command以在限制通过后运行 - 该命令将激活shell或PHP脚本,该脚本将检查文件/数据库条目的存在并相应地执行。
这同样是hacky,但它的好处是不会有额外的脚本运行和轮询,而只是激活一次。