WebSockets, обслуживаемые контейнером Servlet

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

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

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

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

Не хватает ли я чего-то очевидного или невозможно интегрировать конечные точки сервера WebSocket в веб-приложении на основе сервлетов?

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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