Я смотрел WebSockets на прошлой неделе и сделал несколько соображений о том, как реализовать серверную часть с API-интерфейсом Java Servlet. Я не тратить слишком много времени, но натолкнулся на следующие проблемы в течение нескольких тестов с Tomcat, которые, кажется, невозможно решить без заплат контейнера или, по крайней мере, что делает контейнер конкретных изменений в реализацию HttpServletResponse:WebSockets, обслуживаемый контейнером сервлетов
Спецификация WebSocket задает определенное сообщение в ответе 101 HTTP. HttpServletResponse.setStatus (int code, String message) устарел без упоминания пригодной для использования замены. После изменения конфигурации Tomcat по умолчанию я сделал Tomcat честью мою строку сообщения, но поскольку метод устарел, я не уверен, что это будет работать с другими контейнерами сервлетов.
Спецификация WebSocket требует определенного порядка первых нескольких заголовков в ответе HTTP на запрос обновления соединения. API-интерфейс сервлета не предлагает метода для указания порядка заголовков ответов, а Tomcat добавляет свои собственные заголовки в ответ, помещая несколько из них перед любыми заголовками, которые добавляются реализацией сервлета.
Поскольку длина содержимого ответа неизвестна при фиксации заголовка, Tomcat автоматически переключается на кодированное кодирование передачи для ответа, что несовместимо с спецификацией WebSocket.
Не хватает ли я чего-то очевидного или невозможно интегрировать конечные точки сервера WebSocket в веб-приложении на основе сервлетов?
Я столкнулся с почти такими же проблемами. Я действительно хотел расширить Tomcat, чтобы показать, как я хотел бы, чтобы «WebSocket Servlet» выглядел, когда он добавлен в спецификации Java EE. Чтобы увидеть, как я взломал Tomcat, вы можете посмотреть патчи по адресу http://java.dzone.com/articles/tomcat-websockets-html5 –