PHP如何以非阻塞方式休眠?

5 php sleep

可能的重复:
如何阻止 PHP sleep() 影响我的整个 PHP 代码?
PHP:在sleep()之前和之后输出数据?

我在 localhost 中有一个 php 代码,它回显数据并在其间休眠。在客户端,我能够及时看到收到的数据并渲染它。

$condition = true;
while($condition) {
  $data = get_some_data(); // may not fetch new data to be sent, each iteration. 
  echo $data;
  ob_flush();

  $i++;
  sleep(1);

  $condition = run_some_logic(); //could become false depending on DB value
}
Run Code Online (Sandbox Code Playgroud)

但是,当我打开另一个浏览器并尝试打开另一个页面(再次本地主机)时,它甚至没有打开。当我关闭第一个窗口并在一段时间后尝试打开第二个 URL 时,它正在工作。

我认为这显然与睡眠有关。有没有办法定期调用 sleep() 或输出数据,而不阻塞所有其他请求?

我在这里想做的是,在满足条件之前不要让循环结束。

Pee*_*Haa 4

从表面上看,只是等待 PHP 脚本结束(满足基于数据库更改的某些条件),我不会这样做,而是使用 XHR 请求(或酷孩子们喜欢称之为的 AJAX)客户时不时地。

这可以防止用户等待状态改变(解除阻塞)并防止 PHP 的阻塞。

只需让 AJAX 每 5 秒运行一次,以检查后端的状态,看看它是否已更改。

  • 这是不可能的,因为 PHP 不是多线程的,并且您将始终停止其他加载页面的尝试,直到睡眠完成。您必须采用 AJAX 解决方案。 (2认同)