【发布时间】:2012-04-05 15:09:14
【问题描述】:
我目前正在编写一个长轮询脚本,我必须检查数据库是否有新的更改。
我想知道在while循环中执行查询是否会消耗太多资源然后再次执行查询没有任何延迟,或者我应该让稍微延迟一下 一秒钟。
例如,当我在 Facebook 上查看时,它似乎在一秒钟内就有了新的变化,所以我猜他们在检查数据库时没有任何延迟,或者这个延迟真的很短,比如半秒。
我不希望有一个直接的答案,但会有更多关于最佳实践的建议
谢谢
【问题讨论】:
-
PHP 被设计为在 html 之前执行,您是否打算在无休止地循环通过 php 脚本时将这些数据刷新()给用户?对不起,我不明白你的问题。我没有听说过任何 PHP 长轮询,因为它是一个预处理器。如果你想要相对的“实时”更新,通过 AJAX 实现会简单得多。
-
是的,这样做的方法是使用页面超时并且不输出任何东西,直到你得到新的输出。如果您想举例说明它的工作方式,请在 Chrome 中访问 Facebook,当您对网络进行检查时,您会看到对“pull.php”的调用,这是 Facebook 的长轮询,我想重现类似的东西
-
我没有深入研究 facebook 的设计,但我想他们正在使用 AJAX 调用。 Pull.php 很可能会检查一次新信息并在有新信息时更新页面,否则 AJAX 函数将再等待 x 毫秒并调用 pull.php 再次检查。
-
Blake - 我以前做过这个,但主要是因为测试工具和我不想浪费时间构建 AJAX 实现并希望观察其他进程的数据变化的东西。
-
我不知道您期望什么用户负载,但在大多数情况下,长池并不是一个很好的解决方案,因为您保持客户端和服务器之间的连接打开,因此每个插槽都删除一个http 服务器上的用户。 (例如,您服务器上的最大连接变量为 100,如果您有 100 个使用长轮询脚本的用户,则其他新用户将无法连接)。问候
标签: php jquery long-polling