gpt4 book ai didi

php - 长轮询超出最大执行时间

转载 作者:行者123 更新时间:2023-11-29 02:57:30 24 4
gpt4 key购买 nike

我正在尝试使用长轮询从 MySQL 表中获取最新消息。

在这里,如果我没有收到任何新消息,我正在制作脚本 sleep() 10 秒。

但在最坏的情况下,如果我在 10 分钟 内没有收到任何新消息,脚本将显示 max_execution_time exceeded。

我将如何解决这个问题。谁能说我哪里出错了。

附言 - 我至少暂时不想使用 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;}

}
...

最佳答案

(首先,我希望我正确理解了您的代码的用途。)

PHP 旨在按需执行。一个请求进来,它简单地做了一些事情,然后就消失了。相反,让它坐在那里等待是“错误的”。

例如,如果您正在构建类似于 stackoverflow 的“最近收件箱消息”的功能,则可能由客户端 Javascript 代码实现,“坐在那里等待”(等待用户关闭页面)。

堆栈溢出在页面上放置的信息量之多令人印象深刻,而且速度相当快。许多网站在不太复杂的页面上表现不佳。

回到 JS“解决方案”。 JS 代码会定期向某个 SO 服务器上的 PHP(?) 页面发送 AJAX 请求。 PHP 将启动,连接到数据库,获取请求的内容,将其发送回客户端,然后死掉。然后 JS 会修改 DOM,噗,'收件箱' 变成红色,数字递增 1。

这是一项繁重的工作,还有很多事件部件。但我认为任务的启动是在客户端开始的,而不是服务器。

另请注意,一旦 PHP 消失,它就无法重新连接到客户端的网页。 AJAX 服务于此目的,但在“相反的方向”起作用。

关于php - 长轮询超出最大执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28915266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com