を検出することができますどのように私は、私はこのクラスを持っている春のWebSocketは、私はクライアントの接続が切断
を春に新しいです。 ApplicationListenerを実装していますが、リスナーの登録方法がわかりません。 私はweb.xmlでそれを行う必要がありますか?
を検出することができますどのように私は、私はこのクラスを持っている春のWebSocketは、私はクライアントの接続が切断
を春に新しいです。 ApplicationListenerを実装していますが、リスナーの登録方法がわかりません。 私はweb.xmlでそれを行う必要がありますか?
WebSocketHandler
afterConnectionClosed
機能は、WebSocketクライアントの切断後に呼び出されます。 handleTextMessage
を上書きするだけで、これをオーバーライドする必要があります。
クライアントの切断とサーバーイベント検出の間にかなりの遅延が存在する可能性があります。 See details about real-time disconnection detection。
あなたはもう一つの方法は、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 + " ]");
}
}
を私は助けを願っています。もっと説明する必要があるかどうかを教えてください。
おそらく達成したいのは、複数のセッションを維持することです。
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 + "!"));
}
}
セッションが接続されているか閉じているかを検出するためにリスナーを使用できます。
@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);
}
}