Вручную установите тип транспорта в приложении Spring + Sockjs
Мне нужно установить приложение на не совместимый с JEE7 сервер. Я использую Spring + Stomp + SocksJs для уведомлений в реальном времени.
Мой код выглядит так:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry ser) {
ser.addEndpoint("/notifications").withSockJS()
}
}
}
И на клиенте:
function setSocket(broker, callbackFn) {
var socket = {};
socket.cliente = new SockJS(path + broker);
socket.stomp = Stomp.over(socket.cliente);
socket.stomp.connect({}, function () {
socket.stomp.subscribe("/topic" + broker, callbackFn);
});
}
Есть ли способ вручную установить тип транспорта для использования и избежать использования веб-сокетов?
1 ответ
Если ваш сервер не поддерживает веб-сокеты, убедитесь, что он все еще поддерживает асинхронную обработку.
Вы можете отключить транспорт websocket на стороне сервера с помощью следующей опции:
@Override
public void registerStompEndpoints(StompEndpointRegistry ser) {
ser.addEndpoint("/notifications").withSockJS().setWebSocketEnabled(false);
}
Клиенты SockJS автоматически выберут лучший доступный транспорт, поддерживаемый сервером. В вашем случае это предпочтительный способ справиться с этим.
Как объясняется в документации клиента SockJS, вы можете ограничить доступные транспорты на стороне клиента с помощью transports
аргумент при создании клиента SockJS.
sockJsProtocols = ["xhr-streaming", "xhr-polling"];
socket.cliente = new SockJS(url, null, {transports: sockJsProtocols}));
Полный список доступных транспортов здесь. Но технически, если вы не ограничиваете доступные транспорты на стороне сервера, клиент все равно может попытаться подключиться с помощью веб-сокетов.
Некоторая проблема: websocket.js:72 Соединение WebSocket 'ws://192.168.56.1:8080/socket/055/tbeetgqk/websocket' не удалось: WebSocket закрывается до stomp.js:134 К сожалению! Потерянное соединение с http://192.168.56.1:8080/socket