Какова лучшая практика для создания служб уведомлений, таких как на веб-сайте Facebook? - PullRequest
0 голосов
/ 26 февраля 2012

Какова лучшая практика для создания служб уведомлений, таких как на веб-сайте Facebook. Я вижу, что периодически делать запрос http, чтобы проверить, есть ли обновления на сервере, или нет.

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

Это вызывает длинный опрос (тип AJAX).

Я попытаюсь описать ситуацию, когда вы используете PHP и JS, как это делает Facebook.

  • Вы отправляете запрос AJAX на сервер.
  • Бесконечный цикл запускается на стороне сервера
<?php 
$seconds = 0;
while(true) {
   if ($seconds >= 55) {
        die("no_notifications");
   }
   if (false !== ($notifications_json = getNotifications()) {
        echo $notifications_json;
        die();
   }
   $seconds++;
   sleep($TIME_TO_WAIT_BEFORE_NEXT_CHECK); //this number should be based on your performance 
}
?>
  • При появлении нового уведомления скрипт die () s и ответ обрабатываютсяjavascript
  • Новый запрос отправляется на сервер, опять же, в ожидании новых уведомлений

С помощью javascript (я покажу вам пример с jQuery) вы можете использовать что-то вроде

$(function() {
   pollForNotifications();   
});

function pollForNotifications() {
   $.get("/notifications", function(response) {
         if (response != "no_notifications") {
             alert("You've got one new notification!");
             //more proccessing here
         }
         pollForNotifications();
   });
}

Помните, что в определенных браузерах существуют ограничения по времени для выполнения запроса!Вы ДОЛЖНЫ die() через некоторое время (55 секунд), даже если у вас нет никаких уведомлений, чтобы предотвратить проблемы (это предупреждение включено в сценарий выше)!

0 голосов
/ 26 февраля 2012

Возможно, вы захотите проверить Толкатель . Он будет обрабатывать push-уведомления и поддерживает множество браузеров.

0 голосов
/ 26 февраля 2012

Вы можете использовать API WebSocket для реального push-сервиса (не ajax-опроса). Но в настоящее время он является частью HTML5 и поддерживается не всеми браузерами и веб-серверами.

...