Это вызывает длинный опрос (тип 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 секунд), даже если у вас нет никаких уведомлений, чтобы предотвратить проблемы (это предупреждение включено в сценарий выше)!