К сожалению, на самом деле не существует кросс-браузерного механизма для передачи данных с сервера в браузер.Например, в 1995 году Netscape выпустила технологию push-сервера, которая использует специальный тип контента - multipart / x-mixed-replace, но, насколько я понимаю, IE не поддерживает его.WebSockets являются новыми, но поддержка только выходит.
Таким образом, вы вынуждены использовать имеющиеся инструменты, а это значит, что клиент должен спросить сервер, есть ли какие-либо новые данные - опрос.Опрос производится в 2 вариантах: опрос на интервале и длительный опрос .Когда вы опрашиваете интервал, вы просто делаете запрос к серверу каждые n секунд, запрашивая данные.Это довольно болтливо (простите за каламбур), если нет новых данных для возврата.Это то, о чем думают люди, когда вы говорите «опрос».
Другой вариант, длинный опрос, похож на то, что клиент отправляет запрос на сервер, чтобы узнать, есть ли новые данные.Но в этом случае сервер не отправляет ответ, пока ему нечего сказать.В этом случае клиент остается без ответа в течение неопределенного периода времени.Когда клиент в конечном итоге получает свой ответ, он анализирует ответ и немедленно делает другой запрос, который будет зависать до тех пор, пока не будет данных.
Оба эти подхода к опросу потребляют много HTTP-издержек, но если вы хотите использовать XHR, то этоэто единственный способ сделать это.
Слово предупреждения о длинном опросе: при работе с длинным опросом важно убедиться, что все ваши XHR работают асинхронно, в противном случае вы увидите блокировку потока пользовательского интерфейса браузера.up.
Если вы не заинтересованы в использовании AJAX, вы всегда можете использовать проверенный и проверяющий IFRAME, который никогда не завершает загрузку.В этом случае у вас есть IFRAME с журналом чата и другой IFRAME, содержащий вашу область сообщений.В этом случае сервер просто никогда не закрывает соединение для IFRAME, содержащего журнал чата.Вместо этого он просто отправляет сообщения чата в тело.