想法如何在没有php循环的情况下实现服务器推送内容

时间:2012-09-04 14:06:09

标签: php mysql comet

我正在使用comet到客户端浏览器实现服务器推送内容。 当mysql插入时应该有更新,然后客户端会发生一些事情,所以我目前正在通过PHP这样做:

PHP
  while (check database if update is there)
  {
    usleep(10000); 
   // do write json
  }

它实际上工作,但发生在我身上的是我的托管(共享)资源耗尽,即使我只是测试5个同时客户端。 此时CPU的负载为40%并导致帐户禁用。

所以请有人建议如何触发php只发送新更新而不进行循环检查。

3 个答案:

答案 0 :(得分:2)

我不知道你的Javascript是怎样的,但我认为你接近它是不正确的。你真正想做的可能是以10秒的间隔从浏览器发送请求。请参阅this example

答案 1 :(得分:2)

我认为您的问题是您在usleep方面有轻微错误。参数应为:

  

微秒
  微秒停止时间。微秒是百万分之一   第二

您的脚本目前暂停0.01秒而不是10秒,我认为这不是您想要的。


使用:

usleep(10 * 1000000);

或:

sleep(10);

答案 2 :(得分:1)

此方法在睡眠时间内不会使用任何CPU:

set_time_limit(0);
while (check database if update is there) {
   sleep(10); 
   // do write json
}