2016-10-12 5 views
0

Мне нужно установить приложение на сервер, не совместимый с JEE7. Я использую Spring + Stomp + SocksJs для уведомлений в реальном времени.Вручную установить тип транспорта в приложении Spring + Sockjs

Мой код выглядит следующим образом:

@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); 
    }); 

} 

Есть ли способ, чтобы вручную установить тип транспорта использовать и избежать использования WebSockets?

ответ

2

Если ваш сервер не поддерживает веб-порты, убедитесь, что он по-прежнему поддерживает обработку async.

Вы можете отключить WebSocket транспорт на стороне сервера с помощью следующей опции:

@Override 
public void registerStompEndpoints(StompEndpointRegistry ser) { 
    ser.addEndpoint("/notifications").withSockJS().setWebSocketEnabled(false); 
} 

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

Как поясняется в SockJS client documentation, при создании клиента SockJS вы можете ограничить доступные транспортные средства на стороне клиента аргументом transports.

sockJsProtocols = ["xhr-streaming", "xhr-polling"]; 
socket.cliente = new SockJS(url, null, {transports: sockJsProtocols})); 

Полный list of available transports is here. Но технически, если вы не ограничиваете доступный транспорт на стороне сервера, клиент все равно может попытаться подключиться с помощью websockets.

+0

Thank u! это было именно то, что мне нужно. – belial

+0

Я отредактировал свой ответ - в вашем случае вы хотите ограничить доступный транспорт * на стороне сервера *. Выполнение этого только на клиенте работает, но не мешает клиенту попытаться подключиться к вашему серверу с помощью websockets, если этот клиент настроен иначе. –