Я смотрел WebSockets на прошлой неделе и сделал несколько соображений о том, как реализовать серверную часть с Java Servlet API. Я не потратил слишком много времени, но столкнулся со следующими проблемами во время нескольких тестов с Tomcat, которые, по-видимому, невозможно решить без исправления контейнера или, по крайней мере, для конкретных модификаций контейнера для реализации HttpServletResponse:
-
Спецификация WebSocket задает определенное сообщение в ответе 101 HTTP. HttpServletResponse.setStatus(int code, String message) устарел без упоминания пригодной для использования замены. После изменения конфигурации Tomcat по умолчанию я сделал Tomcat честью мою строку сообщения, но поскольку метод устарел, я не уверен, что это будет работать с другими контейнерами сервлетов.
-
Спецификация WebSocket требует определенного порядка первых нескольких заголовков в ответе HTTP на запрос обновления соединения. API-интерфейс сервлета не предлагает метод для указания порядка заголовков ответов, а Tomcat добавляет свои собственные заголовки в ответ, помещая несколько из них перед любыми заголовками, которые добавляются реализацией сервлета.
-
Так как длина содержимого ответа неизвестна при компиляции заголовка, Tomcat автоматически переключается на кодированное кодирование передачи для ответа, что несовместимо с спецификацией WebSocket.
Не хватает ли я чего-то очевидного или невозможно интегрировать конечные точки сервера WebSocket в веб-приложении на основе сервлетов?