2016-10-12 12 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); 
    }); 

} 

を手動でのWebSocketの使用を使用して回避するために、トランスポート・タイプを設定する方法はあり

私のコードは次のようになりますか?

答えて

2

サーバがWebソケットをサポートしていない場合は、まだ非同期処理をサポートしていることを確認してください。

次のオプションを使用して、サーバー側での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です。しかし、技術的には、サーバー側で利用可能なトランスポートを制限していない場合でも、クライアントはWebソケットを使用して接続を試みる可能性があります。

+0

ありがとう!それはまさに私が必要としたものでした。 – belial

+0

私は自分の答えを編集しました。あなたのケースでは、サーバ側で使用可能なトランスポート*を制限したいと考えています。クライアント上でこれを行うだけで動作しますが、クライアントが別の方法で設定されている場合、クライアントがWebサーバーでサーバーに接続しようとすることはありません。 –

関連する問題