我目前正在使用长轮询脚本,我将检查数据库是否有新的更改。
我想知道在while循环中执行查询是否会耗费太多资源然后再次执行查询没有任何延迟,或者我应该让稍微延迟就像一秒钟。
当我在Facebook上查看时,它似乎在第二天内有了新的变化,所以我猜他们在检查数据库时没有任何延迟,或者这个延迟真的很短,只有半秒。
我不希望得到一个直接的答案,但更多关于此
的最佳做法的建议由于
答案 0 :(得分:1)
是的,如果while循环以尽可能快的速度运行(它会),你将不会获得可能压倒数据库连接的快速速率,但是你也不会获得非常“均匀”的轮询速率。
尝试类似
的内容$polllength = 1;
while(1) {
$polltime = microtime(true);
//poll function call;
$endtime = microtime(true);
$sleeptime = $polllength - ($endtime-$polltime);
sleep($sleeptime);
}
这样,无论轮询功能如何变化,你的民意调查都会以$ polllength秒为单位(这将是由INTARNETS引起的)
编辑:同样,确保有一种方法可以摆脱那种循环但是每个人都应该知道你们所有
对于负载平衡,您希望能够以某种方式调整polllength值,以便不完全硬编码。无论是在配置文件中还是由您决定,它甚至可能是随着负载增加而增加的值。这取决于它对最终用户的“感觉”以及服务器的实际情况。一个好的经验法则是n个线程max意味着n *(轮询长度/平均响应时间)用户。当用户等待来自不堪重负的服务器的响应时,超出该限制将无疑会增加响应时间。