Saltar al contenido

Spring Websocket: ¿cómo puedo detectar la desconexión del cliente?

Solución:

los WebSocketHandler afterConnectionClosed se llama a la función después de que un cliente websocket se desconecta. Simplemente necesita anular esto de la manera en que anula handleTextMessage.

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus){
    // your code here
}

Puede haber una demora sustancial entre la desconexión del cliente y la detección de eventos del servidor. Consulte los detalles sobre la detección de desconexiones en tiempo real.

Deberá anular configureClientOutboundChannel y configureClientInboundChannel de AbstractWebSocketMessageBrokerConfigurer, proporcionando su interceptor

Otra forma es usar ApplicationEvents.

Ambos métodos se describen aquí: 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 + " ]");
}

}

Espero que te ayude. Avísame si necesito explicarte más.

Puede utilizar oyentes para detectar cuándo la sesión está conectada o cerrada. Puede encontrar más información sobre los oyentes en este enlace.

Ejemplo de cómo detectar una sesión conectada:

@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);
    }
}

Ejemplo de cómo detectar cuando la sesión está desconectada:

@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);
    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *