2016-05-23 11 views
0

私はspring websocket stompクライアントを使用します。以下のコード断片である:Spring websocket stompクライアント接続をキャプチャする方法は失われますか?

List<Transport> transports = new ArrayList<Transport>(2); 
transports.add(new WebSocketTransport(new StandardWebSocketClient())); 
transports.add(new RestTemplateXhrTransport()); 

WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); 
headers.add("Cookie", client.getCookieString()); 

SockJsClient sockJsClient = new SockJsClient(transports); 

WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient); 
stompClient.setMessageConverter(new StringMessageConverter()); 
ListenableFuture<StompSession> future = 
    stompClient.connect(configuration.getApp().getWebsocketServerBase() + "/websocket/sa", headers, new MyWebSocketHandler()); 

future.addCallback(new SuccessCallback<StompSession>() { 
    public void onSuccess(StompSession stompSession) { 
     System.out.println("on Success!"); 
    } 
}, new FailureCallback() { 
    public void onFailure(Throwable throwable) { 
     System.out.println("on Failure!"); 
    } 
}); 

それは動作しますが、WebSocketのサーバーが閉じているときに、クライアントがメッセージを受信しません。

リスナーサーバーのクローズイベントはどのようにするのですか?

答えて

2

解決策が見つかりました。

MyWebSocketHandlerはこのようStompSessionHandlerを実装しています

private class MyWebSocketHandler implements StompSessionHandler { 
    @Override 
    public void afterConnected(StompSession stompSession, StompHeaders stompHeaders) { 

    } 

    @Override 
    public void handleException(StompSession stompSession, StompCommand stompCommand, StompHeaders stompHeaders, byte[] bytes, Throwable throwable) { 
    } 

    @Override 
    public void handleTransportError(StompSession stompSession, Throwable throwable) { 
     if (throwable instanceof ConnectionLostException) { 
      // if connection lost, call this 
     } 
    } 

    @Override 
    public Type getPayloadType(StompHeaders stompHeaders) { 
     return null; 
    } 

    @Override 
    public void handleFrame(StompHeaders stompHeaders, Object o) { 
    } 
} 

あなたは、メソッドhandleTransportErrorを見ることができます。ありがとうございました。

参照Spring WebSocket Document 25.4.13 STOMPクライアント。

+0

ConnectionLostException:STOMPセッションの接続が切断されずに失われた場合に発生します。 私はそれを使用します。 リファレンス: http://docs.spring.io/autorepo/docs/spring/4.3.3.BUILD-SNAPSHOT/javadoc-api/org/springframework/messaging/simp/stomp/package-summary.html – Sergio

0

は、私はあなたにもSessionDisconnectEventを捕まえることができると思う:

SessionDisconnectEventは - STOMPセッションの終了時に発表しました。 DISCONNECTはクライアントから送信されている場合もあれば、WebSocketセッションが閉じられたときに自動的に生成される場合もあります。場合によっては、このイベントがセッションごとに複数回公開されることがあります。コンポーネントは、複数の切断イベントに関しては冪等でなければなりません。

+0

Iそれを試してみましょう、あなたの答えをありがとう。 –

関連する問題