2017-01-18 10 views
0

同じアプリケーション内で、ときどきwebsocketセッション(dis)接続を追跡する必要があります。Spring Websocketサポート/ Stompを使用してセッション(dis)接続イベントを処理する

SessionConnectedEvent Sを追跡するために接続している間、私は、次の例のように、いくつかのヘッダを渡す:

:サーバ側で

​​

を、そのようなイベントを容易リスナーとStompHeaderAccessorを使用して傍受されます

public class SessionConnectedEventListener implements ApplicationListener<SessionConnectedEvent> { 

    @Override 
    public void onApplicationEvent(SessionConnectedEvent event) { 

     StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());   
     String messageType = StompUtils.getHeaderValue("messageType", sha); 
     // handle business cases depending on the message type 
    } 
} 

ハッキーに見えますが、機能します。

一方、切断時(SessionDisconnectEvent)、StompHeaderAccessor内にはsessionId以外は表示されません。元のセッション/クライアント情報への単一の参照ではありません。 :-(

1)接続時にヘッダーを使用するよりも、セッションに接続されたイベントを区別するための、よりクリーンな方法が存在しますか?

2)セッションの切断中にビジネスデータを渡す方法はありますか?だから私は別のビジネスロジックを処理することができます私のアプリ内のどこに切断が発生した。

答えて

0

私は、切断時にパラメータを渡すことはできません。

セッションIDをキーとする単純なマップを実装できます。値は、接続時にクライアントから取得した値を保持するオブジェクトです。

+0

2)特にそれは大切ではありません。主に、ある種の状態を格納することを意味するためですが、とにかく感謝します。 – tduchateau

関連する問題