Я использую 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
транспорт? Заранее спасибо.