我正在尝试使用长轮询从MySQL表中获取最新消息。
如果我没有收到任何新消息,我将制作脚本sleep()
10秒钟。
但在最糟糕的情况下,如果我没有收到 10分钟的任何新消息,则脚本会说max_execution_time
已超出。
我将如何解决这个问题。任何人都可以说我出错了。
PS - 我现在至少不想使用Websockets。
pullmessage.php
$notyetgot = true;
$data_msg = mysqli_query($con,"SELECT * FROM messages WHERE message_id>".$latest." ");
$n = mysqli_num_rows($data_msg);
if($n > 0){$notyetgot=false;}
while($notyetgot){
sleep(10);
$data_msg = mysqli_query($con,"SELECT * FROM messages WHERE message_id>".$latest." ");
$n = mysqli_num_rows($data_msg);
if($n > 0){$notyetgot = false;}
}
...
答案 0 :(得分:1)
(首先,我希望我能正确理解你的代码的目的。)
PHP旨在按需执行。一个请求进来,它简要地做了一些事情,然后就消失了。相反,让它坐在那里等待某事是错误的"。
例如,如果您正在构建类似于stackoverflow""最近的收件箱消息"的功能,那么可能是由客户端Javascript代码实现的,其中是"坐在那里等待" (等待用户关闭页面)。
堆栈溢出令人印象深刻,它在页面上放置了多少信息,并且速度相当快。许多网站在不太复杂的网页上表现不佳。
回到JS"解决方案"。 JS代码会定期向某个SO服务器上的PHP(?)页面发送AJAX请求。 PHP将启动,连接到数据库,获取所请求的内容,将其发送回客户端,然后死掉。然后JS会修改DOM,poof,' inbox'变为红色,数字增加1。
它做了很多工作,还有许多活动部件。但我认为任务的启动在客户端而不是服务器上启动。
另请注意,一旦PHP消失,它就无法重新连接到客户端的网页。 AJAX服务于这个目的,但是在相反的方向上工作"。
答案 1 :(得分:0)
作为替代方案,您可以从shell运行脚本,其中max_execution_time默认为0(无限)。
php pullmessage.php