2016-12-13 10 views
2

を検出することができますどのように私は、私はこのクラスを持っている春のWebSocketは、私はクライアントの接続が切断

を春に新しいです。 ApplicationListenerを実装していますが、リスナーの登録方法がわかりません。 私はweb.xmlでそれを行う必要がありますか?

答えて

2

WebSocketHandlerafterConnectionClosed機能は、WebSocketクライアントの切断後に呼び出されます。 handleTextMessageを上書きするだけで、これをオーバーライドする必要があります。

クライアントの切断とサーバーイベント検出の間にかなりの遅延が存在する可能性があります。 See details about real-time disconnection detection

1

あなたはもう一つの方法は、ApplicationEventsを使用しているあなたのインターセプタ

を提供し、AbstractWebSocketMessageBrokerConfigurerのconfigureClientOutboundChannelとconfigureClientInboundChannelをオーバーライドする必要があります。

どちらの方法がここで説明されています http://www.sergialmar.com/2014/03/detect-websocket-connects-and-disconnects-in-spring-4/

public class StompConnectEvent implements ApplicationListener<SessionConnectEvent> { 

private final Log logger = LogFactory.getLog(StompConnectEvent.class); 

public void onApplicationEvent(SessionConnectEvent event) { 
    StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage()); 

    String company = sha.getNativeHeader("company").get(0); 
    logger.debug("Connect event [sessionId: " + sha.getSessionId() +"; company: "+ company + " ]"); 
} 

}

を私は助けを願っています。もっと説明する必要があるかどうかを教えてください。

0

おそらく達成したいのは、複数のセッションを維持することです。

public class Server extends TextWebSocketHandler implements WebSocketHandler { 

    private List<WebSocketSession> sessions = new ArrayList<>(); 

    @Override 
    public void afterConnectionEstablished(WebSocketSession session) { 
     sessions.add(session); 
    } 

    @Override 
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { 
     sessions.remove(session); 
    } 

    @Override 
    public void handleTextMessage(WebSocketSession session, TextMessage message) { 
     // clientsession = session; 
     // Send individual or broadcast messages here ... 
     session.sendMessage(new TextMessage(textMessage + "!")); 
    } 
} 
1

セッションが接続されているか閉じているかを検出するためにリスナーを使用できます。

@Component 
public class SessionConnectedEventListener implements ApplicationListener<SessionConnectedEvent> { 

    private IWebSocketSessionService webSocketSessionService; 

    public SessionConnectedEventListener(IWebSocketSessionService webSocketSessionService) { 
     this.webSocketSessionService = webSocketSessionService; 
    } 

    @Override 
    public void onApplicationEvent(SessionConnectedEvent event) { 
     webSocketSessionService.saveSession(event); 
    } 
} 

例セッションがdisconnetedされたときを検出する方法:あなたが接続されているセッションを検出するために、どのようにこのlink.

例で見つけることができるリスナーについて 詳しい情報

@Component 
public class SessionDisconnectEventListener implements ApplicationListener<SessionDisconnectEvent> { 

    private IWebSocketSessionService webSocketSessionService; 

    public SessionDisconnectEventListener(IWebSocketSessionService webSocketSessionService) { 
     this.webSocketSessionService = webSocketSessionService; 
    } 

    @Override 
    public void onApplicationEvent(SessionDisconnectEvent event) { 
     webSocketSessionService.removeSession(event); 
    } 
} 
関連する問題