WebSockets, обслуживаемый контейнером сервлетов - PullRequest
14 голосов
/ 03 февраля 2010

На прошлой неделе я взглянул на WebSockets и немного подумал о том, как реализовать серверную часть с помощью Java Servlet API.Я не тратил слишком много времени, но столкнулся со следующими проблемами во время нескольких тестов с Tomcat, которые, по-видимому, невозможно решить без исправления контейнера или, по крайней мере, внесения изменений в реализацию контейнера HttpServletResponse:1003 *

Спецификация WebSocket требует определенного сообщения в ответе HTTP 101.HttpServletResponse.setStatus (int code, String message) устарел без упоминания о замене, которую можно использовать.После изменения конфигурации Tomcat по умолчанию я заставил Tomcat соблюдать мою строку сообщения, но поскольку этот метод устарел, я не уверен, будет ли он работать с другими контейнерами сервлетов.

WebSocketСпецификация требует определенного порядка первых нескольких заголовков в HTTP-ответе на запрос на обновление соединения.API сервлета не предлагает метод для определения порядка заголовков ответа, и Tomcat добавляет свои собственные заголовки к ответу, помещая несколько из них перед любыми заголовками, которые добавляются реализацией сервлета.

Поскольку длина содержимого ответа неизвестна при фиксации заголовка, Tomcat автоматически переключается на кодирование с частичной передачей для ответа, что несовместимо со спецификацией WebSocket.

Я упускаю что-то очевидное или действительно невозможно интегрировать конечные точки сервера WebSocket в веб-приложение на основе сервлета?

Ответы [ 4 ]

8 голосов
/ 27 октября 2010

Есть реализация в Jetty . Мы можем надеяться, что tomcat и jetty найдут совместимый API.

6 голосов
/ 13 мая 2011

Проект Glassfish Atmosphere сделает то, что вы хотите. Существует сервлет, который вы можете определить для выполнения всей работы.

0 голосов
/ 11 октября 2012

jWebSocket утверждает, что работает как приложение Tomcat. К сожалению, некоторые файлы отсутствуют в двоичном дистрибутиве jWebSocket. Некоторые люди пытаются перекомпилировать jWebSocket и получить необходимые файлы, так как исходный код доступен. В целом, jWebSocket не выглядит надежным продуктом.

0 голосов
/ 12 февраля 2010

Да, есть очень хороший (с открытым исходным кодом и совершенно бесплатно): http://www.jWebSocket.org

...