2012-04-05 53 views
0

我在一个长轮询脚本,我检查新变化的数据库目前工作之间的最佳延迟。的PHP/MySQL/jQuery的 - 长轮询 - 2个数据库检查

我想知道这是否是太耗费资源做在一个while循环查询然后再做查询没有任何延迟,或者我应该让有点延迟像一秒。

当我看到在Facebook上,例如它似乎有内第二新的变化,所以我想他们,他们没有任何延迟,同时检查数据库或这种延迟是非常短的像半秒。

我不指望一个直接的答案,但对最佳实践的详细建议此

感谢

+0

PHP设计的HTML之前,必须执行,你打算这个数据刷新()给用户,同时通过不休PHP脚本循环?对不起,我不明白你的问题。我还没有听说任何PHP长轮询,因为它是一个预处理器。如果你想要相对的“实时”更新,那么通过AJAX实现就简单多了。 – Blake 2012-04-05 15:14:27

+0

是的,要做到这一点就是玩页面超时,不输出任何东西,直到你得到新的输出。如果你想拥有它的工作方式的一例,去Facebook在Chrome浏览器,当你做一个检查进入网络,然后你会看到一个电话“pull.php”这是Facebook的长轮询,我想重现类似的东西 – 2012-04-05 15:17:17

+0

我还没有深入探究Facebook的设计,但我想他们正在使用AJAX调用。 Pull.php更有可能检查一次新信息,如果有新内容更新页面,否则AJAX函数将等待另一个x毫秒并调用pull.php再次检查。 – Blake 2012-04-05 15:19:17

回答

1

呀,如果同时循环运行的速度,因为它可以(就是这样),你不会只是得到一个可能压倒数据库连接的快速率,但你也不会得到非常“平均”的轮询率。

尝试像

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

这样,你的民调约$ polllength秒间隔无论怎样查询功能改变(它会因INTARNETS)

编辑:另外,要确保有一个出路虽然循环但每个人都应该知道,你们都

为了负载平衡,你想能够调整pololength值以某种方式,以便不完全硬编码。无论是在配置文件还是不在您身边的配置文件,它甚至可能会随着负载的增加而增加。这取决于它对最终用户的实际感受,以及服务器如何真正发展。一个好的经验法则是,n个线程最大意味着n *(轮询长度/平均响应时间)的用户。超过此限制无疑会增加响应时间,因为用户等待来自服务器不堪重负的响应。

+0

我目前正在开发一个与帆布的Android应用程序,这很有趣,因为我使用相同的有一个固定的帧速率。但问题是,更多的延迟是最好不要压倒服务器像半秒或一秒钟,差异是安静的大,如果你得到很多用户,所以......;) – 2012-04-05 15:20:35

+0

这取决于服务器比代码更多,methinks。但是这样想一想。找出投票完成需要多长时间。如果它是100ms,那意味着你可能有一个线程每秒可能有10个民意调查。如果最多可以运行10个线程,那么100个用户在轮询时间1秒使用该服务会导致最大容量。 – 2012-04-05 15:22:21

+0

是的和NB的用户,我看到一个脚本一次没有任何延迟......所以我想知道是否有可能做到这一点,而不会打破服务器 – 2012-04-05 15:23:51