Как я могу проверить наличие обновлений в реальном времени, не используя setInterval / timeout?
Создавая социальную сеть, яЯ пытаюсь получить живые уведомления. В настоящее время сайт отправляет запрос AJAX каждые несколько секунд, используя setInterval. Это выглядит примерно так:
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, как они это делают?