这个PhP脚本是长期轮询的合法方法还是在服务器上这么重?
$FoundNewContent = false;
$tokens = array();
while(!$FoundNewContent) {
usleep(300000);
clearstatcache();
$SQL1 = "SELECT * FROM tokens WHERE ID > ".$_GET['tokenID'];
$result1 = mysql_query($SQL1);
while($row1 = mysql_fetch_array($result1, MYSQL_ASSOC)) {
array_push($tokens, $row1);
$FoundNewContent = true;
}
}
// Parse XML array
flush()
我通过Ajax调用此脚本。
答案 0 :(得分:1)
取决于您的服务器设置 - 只要您不使用会话就可以正常工作,但如果一次连接太多,可能会使服务器停止运行。
此外,我会添加一个时间限制,它不返回任何内容并重新开始轮询。否则,如果未添加任何数据且服务器超时设置为无限,则脚本可以永久运行。我通常会增加30秒的限制。
类似的东西:
$FoundNewContent = false;
$tokens = array();
$time = time();
while(!$FoundNewContent) {
usleep(300000);
clearstatcache();
$SQL1 = "SELECT * FROM tokens WHERE ID > ".$_GET['tokenID'];
$result1 = mysql_query($SQL1);
while($row1 = mysql_fetch_array($result1, MYSQL_ASSOC)) {
array_push($tokens, $row1);
$FoundNewContent = true;
}
if($time<time()-30) break;
}
flush()