Подтвердить что ты не робот

Как чат Facebook избегает непрерывного опроса сервера?

Я пытаюсь понять, как функция чата Facebook получает сообщения без постоянного контроля сервера.

Firebug показывает мне, что один GET XmlHttpRequest постоянно сидит там, ожидая ответа от сервера. Через 5 минут это никогда не заканчивалось.

Как они предотвращают таймаут?

Запрос AJAX может просто сидеть там так неопределенно, ожидая ответа?

Могу ли я сделать это с помощью JSONRequest? Я вижу это на json.org:

JSONRequest предназначен для поддержки дуплексные соединения. Это позволяет приложения, в которых сервер может асинхронно инициировать передачи. Это делается с использованием двух одновременных запросы: один для отправки, а другой - Получать. Используя тайм-аут параметр, запрос POST может быть оставлен до тех пор, пока сервер не определит что у него есть своевременные данные для отправки.

Или есть другой способ, чтобы вызов AJAX просто сидел там, ожидая, помимо использования JSONRequest?

4b9b3361

Ответ 1

Facebook использует технику, которая теперь называется Comet, чтобы пересылать сообщения с сервера клиенту вместо того, чтобы опросить клиента на сервере.

Есть много способов, которыми это может быть реализовано: длительный опрос XMLHttpRequest является всего лишь одним из вариантов. Принцип этого метода заключается в том, что клиент отправляет обычный XMLHttpRequest, но сервер не отвечает до тех пор, пока не произойдет какое-либо событие (например, другой пользователь, отправляющий сообщение), поэтому клиент вынужден ждать. Когда клиент получает ответ (или если время ожидания запроса), клиент просто создает новый запрос, так что он всегда имеет один открытый запрос на сервер.