openshift + весенний веб-сокет

Я новичок в openshift и в настоящее время пытаюсь настроить там свое веб-приложение, но у меня есть некоторые проблемы. Пока я пытаюсь подключиться к

ws://app-domain.rhcloud.com:8000/путь

Я получаю следующее исключение:

Caused by: java.lang.IllegalArgumentException: No 'javax.websocket.server.Server Container' ServletContext attribute. Are you running in a Servlet container that
supports JSR-356?
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.getContainer(AbstractStandardUpgradeStrategy.java:68)
    at org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy.getContainer(TomcatRequestUpgradeStrategy.java:83)
    at org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy.getContainer(TomcatRequestUpgradeStrategy.java:46)
    at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.getSupportedExtensions(AbstractStandardUpgradeStrategy.java:88)
    at org.springframework.web.socket.server.support.DefaultHandshakeHandler.doHandshake(DefaultHandshakeHandler.java:214)
    at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest(WebSocketHttpRequestHandler.java:127)
    ... 25 more

Когда я запускаю приложение локально, все работает нормально со следующим URL-адресом:

ws://localhost:8090/путь

В обоих случаях я использую Tomcat 7. Spring Config:

<websocket:handlers allowed-origins="*">
    <websocket:mapping path="/fight-core" handler="webSocketHandler"/>
    <websocket:handshake-interceptors>
        <ref bean="webSocketHandshakeInterceptor"/>
    </websocket:handshake-interceptors>
</websocket:handlers>

Также я пробовал использовать зависимость websocket-api в моем pom.xml и без нее.

Почечный совет


person Mikhail Matvienko    schedule 02.07.2015    source источник


Ответы (1)


Очевидно, дело не в Spring и не в Tomcat, а в уровне маршрутизации Openshift; похоже, что поддержка веб-сокетов все еще является экспериментальной, см.: * сообщение в блоге от 2012 года, объясняющее ситуацию * официальная документация Openshift

Для обычных соединений WebSocket (ws://) запросы направляются на порт 8000, а для безопасных соединений WebSocket (wss://) используется порт 8443, как показано в следующем примере: http://example.example.com:8000 https://example.example.com:8443

person Brian Clozel    schedule 04.07.2015