Что такое Ajax-Push? Существуют ли предостережения относительно его использования на некоторых серверах? - PullRequest
1 голос
/ 11 августа 2011

Может кто-нибудь объяснить, что такое ajax-push?Из того, что я понимаю, это означает, что HTTP-соединения должны оставаться открытыми в течение длительного времени и при необходимости переподключаться.Кажется, он часто используется в системах чата.

Я также слышал, что при использовании ajax-push в Java важно что-то использовать с NIO-connetors или grizzle serlvet api?Опять же, я просто исследую, что именно.

1 Ответ

4 голосов
/ 11 августа 2011

В обычном AJAX (назовите его pull ) вы запрашиваете у сервера что-то и получаете его немедленно.Это нормально, если вы хотите получить некоторые данные с сервера сейчас .Но что, если что-то случится на сервере, и сервер захочет передать это событие клиенту (-ам)?

Технически это реализуется с помощью так называемого длинного опроса - браузер открывает HTTP-соединение и ожидает ответа.Пока на стороне сервера нет ничего интересного, он ждет.Но когда что-то происходит, сервер отправляет ответ, а клиент получает его немедленно .Это огромное преимущество по сравнению с обычным опросом, когда вы запрашиваете сервер каждые несколько секунд - он генерирует большой трафик и все еще вносит заметную задержку.

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

Однако в настоящее время существует множество решений:

  • Tomcat разъемы NIO

  • Атмосфера Библиотека Ajax Push / Comet

  • Servlet 3.0 @Async (наиболее переносимый)

  • Особенности, относящиеся к контейнеру, но Servlet 3.0, если таковой имеется, следует считать превосходящим.

...