ソーシャル ネットワークを構築して、ライブ通知を取得しようとしています。現在、サイトは setInterval を使用して数秒ごとに AJAX リクエストを送信しています。次のようになります。
setInterval ( function(){
url = base_dir+"/ajax/file.php";
data = "data=someData";
$.ajax({
type: "POST",
url: url,
data: data,
dataType: "json",
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/json;charset=UTF-8");
}
},
success: function(JSON){
// retrieve data here
}
});
}, 5000);
それは完全に機能しますが、サーバーの過負荷が発生することを非常に心配しています. コメット テクニックを試してみましたが、何らかの理由で上記のコードよりもはるかに多くのリクエストが送信されます。このデータをライブにプッシュするための他の便利な手法はありますか?
編集:ロングポーリングを実装するために、私は以下を使用しました(ここで言及されている例を使用: http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery ):
(function poll(){
url = base_dir+"/ajax/file.php";
data = "data=someData";
$.ajax({
type: "POST",
url: url,
data: data,
dataType: "json",
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/json;charset=UTF-8");
}
},
success: function(JSON){
// retrieve data here
},
complete: poll,
timeout: 5000
});
})();
彗星の原理を正しく理解していない可能性があります。
PHP コード:
// Checks for new notifications, and updates the title and notifications bar if there are any
private static function NotificationsCounter (){
//self::$it_user_id = query that retrieves my id for further checks;
//$friend_requests_count = query that retrieves the friend requests count;
//$updates_count = query that retrieves the updates count;
$total_notifications = $friend_requests_count+$updates_count;
if ($total_notifications > 0) $addToTitle = "(".$total_notifications.")";
else $addToTitle = "";
if ($updates_count > 0) $counterHTML = "<span class='notification_counter' id='updates_counter' style='float: right;'>".$updates_count."</span>";
else $counterHTML = "";
$data = array("counter"=>$total_notifications,"addToTitle"=>$addToTitle,"counterHTML"=>$counterHTML,);
echo json_encode($data); // parse to json and print
}
Facebook も PHP を使用していますが、どのように行っているのでしょうか?