Задать вопрос

Long polling — как сделать уведомление?

Необходимо сделать уведомление о количестве новых сообщения для пользователей, используя Long polling.
Что есть на данный момент:

клиент 1
$(document).ready(function getmess(){
    $.ajax({
	url:"notif.php", 
	data:{"id":id},
	type:"POST",
	timeout: 10000,
        complete:getmess,
	success:function(result){
	$("#count").html(result);
	}
	});
});


сервер:
$mysqli = new mysqli('localhost', 'root', '', 'lc');
	if (mysqli_connect_errno()) { 
		printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error()); 
		exit; 
	}  
session_start(); 
	

$MY_ID = $_SESSION['id'];

$newData = false;

while (true) {
$result = $mysqli->query("SELECT COUNT(*) FROM messages WHERE user_get='$MY_ID' AND status='1' ");
if (mysqli_num_rows($result)) {
while ($row = mysqli_fetch_array($result)) {
echo $row[0]."";
}
flush();
exit;
}
sleep(5);
}


Реализацию данного метода подсмотрел по этой ссылке toster.ru/q/52092
Суть в чем - мне надо отсылать запрос на сервер и ждать ответ 10 секунд, если ответа нет, то отсылать опять запрос и ждать 10 секунд ответа.

Но у меня никак не получается это сделать, - запросы отсылаются каждую секунду длиной тоже 1 секунду, при этом нарушается сам принцип Long polling. На изменения значения timeout не реагирует вообще.
  • Вопрос задан
  • 7167 просмотров
Подписаться 7 Оценить Комментировать
Ответ пользователя RageXL К ответам на вопрос (6)
@RageXL Автор вопроса
Нет запросы не прерываются, сервер отвечает. Просто длина запроса 1 секунда, а мне надо ждать ответа от сервера как минимум 10 секунд и в случае успешного ответа сразу отсылать новый запрос, так же если сервер не ответил в течении 10 секунд, т.е. в базе не было никаких изменений, то отсылать новый запрос длиной 10 секунд.
Мне нужно получать не сообщения а их число. Например в базу добавилось новое сообщение и число в блоке сразу увеличилось, т.е. просто уведомлять пользователя о новых сообщениях для него.
Ответ написан