Как я могу проверить наличие обновлений в реальном времени, не используя 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, как они это делают?

Ответы на вопрос(2)

Ваш ответ на вопрос