2016-10-12 4 views
0

Ich muss eine Anwendung auf einem nicht JEE7-konformen Server installieren. Ich benutze Spring + Stomp + SocksJs für Echtzeit-Benachrichtigungen.Manuelles Einstellen des Transporttyps in einer Spring + Sockjs-Anwendung

sieht Ihr Code wie folgt aus:

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

    } 

} 

Und auf dem Client:

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

} 

Gibt es eine Möglichkeit, manuell den Transporttyp zu verwenden und zu vermeiden den Einsatz von WebSockets eingestellt?

Antwort

2

Wenn Ihr Server keine Websockets unterstützt, stellen Sie sicher, dass er weiterhin die asynchrone Behandlung unterstützt.

Sie können den websocket Transport auf der Serverseite mit der folgenden Option deaktivieren:

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

SockJS Kunden automatisch den besten verfügbaren Transport vom Server unterstützt werden wählen. In Ihrem Fall ist dies der bevorzugte Weg, um damit umzugehen.

Wie in der SockJS client documentation erläutert, können Sie die verfügbaren Transporte auf der Clientseite mit einem transports Argument beim Erstellen des SockJS-Clients begrenzen.

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

Die volle list of available transports is here. Wenn Sie jedoch die verfügbaren Transporte auf der Serverseite nicht einschränken, könnte ein Client dennoch versuchen, eine Verbindung über Websockets herzustellen.

+0

Vielen Dank! das war genau das, was ich brauchte. – belial

+0

Ich habe meine Antwort bearbeitet - in Ihrem Fall möchten Sie die verfügbaren Transporte * auf der Serverseite beschränken *. Dies funktioniert nur auf dem Client, verhindert jedoch nicht, dass ein Client versucht, eine Verbindung zu Ihrem Server mit Websockets herzustellen, wenn dieser Client anderweitig konfiguriert ist. –

Verwandte Themen