2015-05-04 3 views
9

Это работает:WebSockets не работает без WebApp

String webappDir = "..."; 
context = tomcat.addWebapp("/", new File(webappDir).getAbsolutePath()); 

Это не:

context = tomcat.addContext("/", new File("").getAbsolutePath()); 

Я действительно не нужен webappDir в данном случае, потому что я не служу ни одной страницы JSP или клиентских ресурсов, я просто использую только серверный сервер response.getWriter().println(...);.

Исключение не исключено, websocket просто не открывается.

Могу ли я предположить, что это ошибка кота?

+2

Если вам не нужен контекст веб-приложения, вы можете использовать Java API для WebSockets JSR 356 напрямую вместо API-интерфейсов tomcat. – vzamanillo

+1

Вы можете создать своего клиента как отдельное приложение Java с JSR 356, чтобы создать сервер, на котором вы можете использовать любой контейнер сервера Java EE с поддержкой встроенных или встроенных веб-камер (GlassFish, Apache Tomcat, Jetty ...) для развертывания WebSocketServlet и прослушивания для клиентских сообщений. – vzamanillo

+1

Я думаю, что это невозможно, API-интерфейсы websockets предназначены для использования сокетов в веб-приложениях, поэтому вам нужен контейнер, если вам не нужно веб-приложение, не используйте веб-сайты, просто используйте Java-сокеты. – vzamanillo

ответ

1

Если посмотреть на тесты (тест/орг/Apache/Tomcat/WebSocket в исходном коде), они делают

tomcat.addContext("", null); 

Обратите внимание, что передача null вместо контекста пути нуждается в недавнем Tomcat 8 (не старше нескольких месяцев). Текущая версия - 8.0.22.

Могу ли я предположить, что это ошибка кота?

Правило «перед подачей ошибки» заключается в запросе в списке рассылки пользователей, а не в стеке.

+1

Да, тесты в 8.0.21 используют этот API. –

3

ну, эти две полностью разные функции. Если вы посмотрите на javadoc для функции addContext, вы увидите, что вам нужно настроить контекст, чтобы иметь возможность использовать websocket. это извлекается из api doc.

Добавить контекст - программный режим, не используемый по умолчанию для web.xml. Это означает , что нет поддержки JSP (нет сервлета JSP), сервлета по умолчанию и нет поддержки веб-сокета, если явно не разрешено через программный интерфейс .

Итак, в вашем случае, я думаю, вы можете следовать тестовому примеру в этом link, как добавить конечную точку в контекст.

Как можно предположить, что это ошибка или нет. Лично я не думаю, что это ошибка, поскольку сам разработчик уже упоминает, что они не предоставляют соединение с веб-сокетом. Но, чтобы убедиться, вы можете связаться с ними и спросить;).

+1

Конечно, вы можете использовать websocket.Я имею в виду, что вам нужно больше усилий, чтобы настроить его, поскольку он не приходит «бесплатно». Если у меня будет время, я постараюсь посмотреть ваше репо на git. –

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