【问题标题】:Will php sleep/usleep strain the server?php sleep/usleep 会给服务器带来压力吗?
【发布时间】:2013-08-08 08:53:52
【问题描述】:

我正在尝试长轮询。我使用 jquery ajax 调用服务器上的 php 脚本。

这是我的代码:

function getlatest($a){

    $stmt = $dbconnect->prepare("SELECT `timestamp` FROM `test`");
    $stmt->execute();
    $stmt->bind_result($r);
    $timestamp = array();
    while($stmt->fetch())
    {
         array_push($timestamp,$r);
    }

    asort($timestamp);
    $x = end($timestamp);

    if($x > $a){
        //do this
    } else {
        sleep(5);
        getlatest($a);
    }

}

我正在尝试为我们的办公室制作一个简单的聊天系统。只有大约 100 个连接的用户在同一时间运行此脚本一整天。

上面的示例代码会不会消耗大量的系统资源?

我只是无法将它放到网上并对其进行测试,因为我已经收到了来自托管的最后警告。

【问题讨论】:

  • 线程将被停止,所以是的。但是你为什么不使用循环?您的代码将在一段时间后填充方法堆栈,直到您收到 stackoverflow 异常错误。 (最好睡在客户端)
  • 嗯,实际上这可以工作,取决于你所说的大量系统资源是什么意思。我不会使用 php 进行无限循环(即使在处理脚本期间使用刷新来更新缓冲区),而是看一些 php 套接字聊天。
  • 你从哪里得到$a
  • @CORRUPT 抱歉忘记了。 .
  • @KarelG 客户端睡眠。我可以使用它。这样会更好吗?

标签: php sleep long-polling usleep


【解决方案1】:

您将使用此函数进行无限循环,PHP 是服务器端并在完成运行脚本后开始输出。只有这样它才会被发送到用户浏览器。为什么不在 javascript 中使用 setInterval 并让用户浏览器来做呢?

【讨论】:

  • 我使用 jquery ajax 来调用上面的脚本。并且在上面返回一个值之前,ajax 不会关闭。
  • 那是因为你没有返回一个值,你一直在调用相同的函数。删除 getlatest 函数中对 getlatest 的调用,让 jquery 处理间隔。
  • 我知道它在循环中。这就是为什么我要问“php sleep/usleep 会给服务器带来压力吗?”因为我的示例代码中的间隔是服务器端而不是用户端。
  • 所以,你有你的答案,它会死循环,不会返回任何数据,函数没用! javascript === 客户端循环中的 setInterval。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2012-09-06
  • 2017-08-17
  • 1970-01-01
相关资源
最近更新 更多