Есть ли у приложений веб-сервера Java какой-либо способ PUSH? - PullRequest
2 голосов
/ 02 июня 2010

Веб-серверы работают в ответ на входящие HTTP-запросы ... обрабатывают запрос и возвращают HTTP-ответ. Существуют ли какие-либо общие способы, которыми сервер может передавать данные клиентам в этой архитектуре ... например, от клиента 1 поступает запрос, и сервер хочет уведомить клиента 2? Очевидно, что это может быть сделано не веб-сервером, использующим сокеты, но как насчет приложения веб-сервера, которое должно поддерживать запросы страниц и разрешать данные PUSHing ..?

Ответы [ 4 ]

1 голос
/ 02 июня 2010

Вы можете использовать контейнеры веб-приложений, такие как Jetty , которые поддерживают Веб-сокеты , если вы не против подождать, пока веб-мир догонит этот новый стандарт. Тогда у вас будет настоящая двусторонняя связь вместо HTTP + Polling или специальных плагинов или тому подобного.

1 голос
/ 02 июня 2010

как насчет приложения веб-сервера, которое должно поддерживать запросы страниц и разрешать PUSHing-данные ..?

В Servlet 3.0 появилась поддержка Async, позволяющая писать приложения в стиле Comet (т.е. приложения, использующие долгоживущие HTTP-соединения и либо длинный опрос , либо потоковая ).

Если вы не можете дождаться поддержки Servlet 3.0 Async и не хотите использовать проприетарную поддержку Comet или WebSocket из контейнеров (таких как GlassFish, Jetty), взгляните на Atmosphere .

Смотри также

0 голосов
/ 02 июня 2010

Другой возможностью было бы злоупотребление HTTP Keep Alive для достижения этой цели. Смотрите http://en.wikipedia.org/wiki/HTTP_persistent_connection для некоторого фона. В вашем сценарии вы бы client2 инициировали соединение с сервером, которое затем оставалось бы открытым для прослушивания уведомлений.

Это не очень хорошее решение, во-первых, вам нужно сохранить множество долгоживущих TCP-соединений, и в случае потери соединения сервер не сможет восстановить соединение. Он должен ждать, пока клиент вернется.

0 голосов
/ 02 июня 2010

Нет, не без некоторой технологии на стороне клиента (Flash, Silverlight, Applets и т. Д.)

Вы могли бы сделать так, чтобы страница опрашивала сервер с помощью AJAX.

...