0

这个 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 调用这个脚本。

4

1 回答 1

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()
于 2012-11-06T10:56:07.420 回答