В обычном AJAX (назовите его pull ) вы запрашиваете у сервера что-то и получаете его немедленно.Это нормально, если вы хотите получить некоторые данные с сервера сейчас .Но что, если что-то случится на сервере, и сервер захочет передать это событие клиенту (-ам)?
Технически это реализуется с помощью так называемого длинного опроса - браузер открывает HTTP-соединение и ожидает ответа.Пока на стороне сервера нет ничего интересного, он ждет.Но когда что-то происходит, сервер отправляет ответ, а клиент получает его немедленно .Это огромное преимущество по сравнению с обычным опросом, когда вы запрашиваете сервер каждые несколько секунд - он генерирует большой трафик и все еще вносит заметную задержку.
Единственная проблема в этом подходе - количество ожидающих HTTP-соединений.Контейнеры Java-сервлетов старой школы не совсем способны обрабатывать такое количество соединений из-за ограничения одного потока на соединение - они быстро исчерпывают память.Хотя потоки HTTP ничего не делают (ожидая, пока какая-то другая часть системы разбудит их и даст ответ), они занимают память.
Однако в настоящее время существует множество решений:
Tomcat разъемы NIO
Атмосфера Библиотека Ajax Push / Comet
Servlet 3.0 @Async
(наиболее переносимый)
Особенности, относящиеся к контейнеру, но Servlet 3.0, если таковой имеется, следует считать превосходящим.