如何以非阻塞的方式在PHP中睡觉?

时间:2012-08-26 12:37:36

标签: php sleep

  

可能重复:
  How can I stop PHP sleep() affecting my whole PHP code?
  PHP: Output data before and after 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
}

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

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

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

1 个答案:

答案 0 :(得分:2)

看起来它只是等待PHP脚本结束(满足基于数据库更改的某些条件)我不会这样做,而是使用XHR请求(或AJAX作为酷孩子喜欢调用it)不时地从客户那里。

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

简单地让AJAX运行5秒用后端检查状态是否已经改变。