【问题标题】:MAX EXECUTION TIME exceeded in long polling长轮询中超过了 MAX EXECUTION TIME
【发布时间】:2015-05-09 00:44:24
【问题描述】:

我正在尝试使用长轮询从 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;}

    }
 ...

【问题讨论】:

  • 不要那样做。重新设计流程,这样 Web 服务器就不会坐在那里等待“活动”线程。
  • 你能澄清@RickJames 应该重新设计什么吗?能举个简单的例子吗

标签: php mysql ajax comet long-polling


【解决方案1】:

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

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

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

堆栈溢出令人印象深刻,它在页面上放置了多少位信息,并且执行速度相当快。许多网站在不太复杂的页面上表现不佳。

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

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

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

【讨论】:

  • 你确实理解了我的问题。因此,每个用户每10-20 seconds 对服务器进行一次 ajax 调用(假设有数十万人同时在线)对服务器的请求太多了。
  • stackoverflow 是如何解决的?我没有看到来自 stackoverflow 的太多请求,但它仍然设法显示最近的收件箱消息,通知速度很快吗? @rickjames
  • 他们可以通过多种方式在猛攻中幸存下来。一种是拥有大量带有 Web 服务器的机器,并让它们从大量 MySQL 从站中读取。使用这种布局(以及足够的钱来负担​​它),您可以实现无限扩展。
  • 另一种技术是使用 memcached(或其他非 MySQL、基于 web 的缓存机制)。这将包含 AJAX 调用的“答案”。但是,每当有消息进入时,该缓存都需要“无效”。一个额外的层,具有额外的复杂性,但速度更快。
  • 根据你的经验,你能说出每个客户端每分钟必须向服务器发送多少请求(假设服务器同时包含大约 100 万个客户端)在最便宜的 VPS 中@瑞克詹姆斯
【解决方案2】:

作为替代方案,您可以从 shell 运行脚本,其中 max_execution_time 默认为 0(无限)。

php pullmessage.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2011-06-09
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多