【问题标题】:PHP/Mysql/jQuery - Long Polling - Best delay between 2 database checksPHP/Mysql/jQuery - 长轮询 - 2 次数据库检查之间的最佳延迟
【发布时间】: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


【解决方案1】:

是的,如果 while 循环尽可能快地运行(它会),您不仅会获得可能会压倒数据库连接的快速速率,而且您也不会获得非常“均匀”的轮询速率。

试试类似的东西

$polllength = 1;
while(1) {
    $polltime = microtime(true);
    //poll function call;
    $endtime = microtime(true);
    $sleeptime = $polllength - ($endtime-$polltime);
    sleep($sleeptime);
}

这样,无论轮询功能如何变化,您的轮询大约相隔 $polllength 秒(这将归因于 INTARNETS)

编辑:另外,请确保有办法摆脱那个 while 循环,但每个人都应该知道你们都

对于负载平衡,您希望能够以某种方式调整 polllength 值,以免完全硬编码。无论是在配置文件中还是由您决定,它甚至可能是随着负载的增加而增加的值。这取决于最终用户对它的实际“感觉”以及服务器的实际运行情况。一个好的经验法则是 n 个线程最大值意味着 n *(轮询长度/平均响应时间)用户。当用户等待来自不堪重负的服务器的响应时,超出该限制无疑会增加响应时间。

【讨论】:

  • 我目前正在开发一个带有画布的安卓应用程序,这很有趣,因为我使用它来获得恒定的帧速率。但问题更多的是,哪种延迟最好不要像半秒或一秒那样压倒服务器,如果你有很多用户,那么差异就会很大......;)
  • 这取决于服务器而不是代码,我认为。但是这样想。弄清楚民意调查需要多长时间才能完成。如果是 100 毫秒,这意味着使用一个线程,您每秒可能进行 10 次轮询。如果您最多可以运行 10 个线程,则有 100 个用户在轮询时间 1 秒时使用该服务,从而导致最大容量。
  • 是的,nb 的用户,我看到一个脚本一次没有任何延迟地这样做......所以我想知道是否可以在不破坏服务器的情况下这样做
  • 我认为将会发生的情况是,当服务器不堪重负时,它只会“等待”直到准备好。随着用户数量的增加,这会导致延迟增加,但根据您的容量将轮询时间设置为合理的时间可能会带来更统一且可预测的体验。
  • 是的,我想在体验它之前没有办法真正知道最好的延迟,但感谢您的建议,我喜欢您提出的两次检查之间恒定时间的想法;)
猜你喜欢
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多