2

我想保持我的网站更新,在数据库中添加了一项新信息。我不能使用Node.jsand Comet Programming,并且Javascript's setInterval由于请求太多,这似乎是个坏主意。

现在我正在使用这样的东西:

Javascript:

var url = "path_to/file.php";
var req = xmlhttp();
req.open("GET", url, true);
req.send(null);
poll = setInterval(getResponse, 100);
function getResponse()
{
  var data = req.responseText;
  var res = document.getElementById("response");
  res.innerHTML = data;
}

PHP:

<?php
  set_time_limit(0);
  ob_start(); 

   while(true)
   {
    #CODE
    flush(); 
    ob_flush(); 
    sleep(0.3); 
   }

  flush(); 
  ob_flush(); 
?>

这是一个好主意吗?我可以毫无问题地使用它吗?也许有人知道保持持久连接的更好方法?(在我的网站上将有大约 500 个在线用户)

4

1 回答 1

2

通过WebSockets推送是一种替代方法,但仅适用于最新版本的浏览器。

您的脚本的缺点是每 100 毫秒询问一次(这很短),当最新的 ajax 响应尚未到达时也是如此。我会更改脚本以仅在前一个 ajax 已经到达并且自最后一个 ajax 到达后的最短时间(超时)时才要求服务器进行更改。

例如(未经测试):

function getResponse() {
    var data = req.responseText;
    var res = document.getElementById("response");
    res.innerHTML = data;
    setTimeout(getResponse, 500);
}
var url = "path_to/file.php";
var req = xmlhttp();
req.open("GET", url, true);
req.send(null);
getResponse();
于 2012-06-08T11:32:47.620 回答