0

我目前正在处理一个长轮询脚本,我必须在其中检查数据库是否有新更改。

我想知道在一个while循环中进行查询是否会消耗太多资源然后再次进行查询而没有任何延迟,或者我是否应该让一点延迟,比如一秒钟。

例如,当我在 Facebook 上查看时,它似乎在一秒钟内就有了新的变化,所以我猜他们在检查数据库时没有任何延迟,或者这种延迟真的很短,比如半秒。

我不期待一个直接的答案,但更多关于最佳实践的建议

谢谢

4

1 回答 1

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 *(轮询长度/平均响应时间)用户。当用户等待来自不堪重负的服务器的响应时,超出该限制无疑会增加响应时间。

于 2012-04-05T15:15:49.137 回答