Spring Websocket с SockJs переключается с потоковой передачи XHR на Websocket

Я использую Spring Websocket с SockJs (v1.1.1) поверх STOMP на клиенте. Я создаю клиента с кодом ниже.

SockJS = require('sockjs-client')
Stomp = require('webstomp-client')
stompClient = Stomp.over(new SockJS(url))

Работает нормально. Но по умолчанию он использует xhr_streaming в качестве транспорта, что для меня нежелательно. Хочу переключить на websocket транспорт.

stompClient = Stomp.over(new SockJS(url, null, {transports:'websocket'}))

Но у меня такой подход не работает. Он падает с событием:

code: 2000
reason: "All transports failed"

Моя конфигурация Spring Websocket очень проста:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {

    @Override
    public void configureStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/myEndpoint").setAllowedOrigins("*")
            .withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/queue/", "/topic/");
        registry.setApplicationDestinationPrefixes("/app");
    }

}

Основная проблема, с которой я сталкиваюсь с xhr_streaming, заключается в том, что каждый запрос потока обновляет время последнего доступа для пользовательского сеанса (я также использую Spring Session). Но это нежелательное поведение для моего приложения. Так как я могу это исправить? И поможет ли websocket транспорт? Заранее спасибо.


person jahra    schedule 29.12.2016    source источник


Ответы (1)


Итак, у меня есть причина. Я использую сервер webpack dev с опцией proxy. По умолчанию он НЕ проксирует ws запросы протокола (теряются заголовки). Вам нужно добавить ws: true в свой конфиг, и все будет работать нормально.

proxy: {
        '/api/*': {
            target: 'http://localhost:8080',
            pathRewrite: {'^/api' : ''},
            ws: true 
        }
    }
person jahra    schedule 30.12.2016