2

データベースに新しい情報が追加されたら、Web サイトを最新の状態に保ちたいと考えています。Node.jsComet 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

WebSocket経由のプッシュは代替手段ですが、最新バージョンのブラウザーでのみ機能します。

あなたのスクリプトには、最新の ajax 応答が到着していないときにも、100 ミリ秒ごとに (これは非常に短い) 要求するという欠点があります。以前の 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 に答える