2010-02-03 5 views
14

Я смотрел 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 в веб-приложении на основе сервлетов?

+1

Я столкнулся с почти такими же проблемами. Я действительно хотел расширить Tomcat, чтобы показать, как я хотел бы, чтобы «WebSocket Servlet» выглядел, когда он добавлен в спецификации Java EE. Чтобы увидеть, как я взломал Tomcat, вы можете посмотреть патчи по адресу http://java.dzone.com/articles/tomcat-websockets-html5 –

ответ

-3

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

+1

Нет, jWebSocket не основан на сервлетах. – jarnbjo

8

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

+1

Я знаю, но я более или менее надеялся, что поддержка WebSocket должна быть возможна с использованием стандартного API Servlet, а не с использованием каких-либо конкретных контейнеров. – jarnbjo

+0

Я понимаю. Тогда единственное решение Servlet 3.0 - это решение. В настоящее время спецификация является бета-версией (я думаю). Но уже есть некоторые реализации спецификации. Конечно, в бета-версии. – Horcrux7

+1

link is dead ... –

6

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

0

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

+0

У меня такой же опыт – fransvn

 Смежные вопросы

  • Нет связанных вопросов^_^