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


Idea how to implement server-push content without php looping

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

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

它确实有效,但发生在我身上的是,即使我只测试了5个同时运行的客户端,我的主机(共享)资源也会耗尽。此时CPU负载为40%,导致帐户禁用。

因此,请有人建议如何触发php只发送新的更新而不进行循环检查。

我认为您的问题是关于usleep有一个小错误。参数应为:

微秒
暂停时间(微秒)。微秒是第二

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


用途:

usleep(10 * 1000000);

或:

sleep(10);

我不知道你的Javascript是什么样子的,但我认为你处理它是不正确的。你真正想做的可能是每隔10秒从浏览器发送请求。请参见此示例。

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

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