So erkennen Sie, dass der Client die Verbindung zum Websocket im Frühjahr mvc getrennt hat
Ich möchte erkennen können, wenn der Benutzer die Verbindung zum Server verloren hat (geschlossene Registerkarte, unterbrochene Internetverbindung usw.). Ich verwende Stompjs über Sockjs auf meinem Client und Spring MVC-Websockets auf meinem Server.
Wie kann ich feststellen, wenn der Client die Verbindung verloren hat? So konfiguriere ich meine Websocket-Nachrichtenbroschüre:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Autowired
private TaskScheduler scheduler;
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic").setHeartbeatValue(new long[]{10000, 10000}).setTaskScheduler(scheduler);
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/web").setAllowedOrigins("*").withSockJS();
}
}
Und hier ist meine Controller-Klasse, die tatsächlich die eingehenden Socket-Nachrichten verarbeitet:
@RestController
@CrossOrigin
public class WebMessagingController {
@MessageMapping("/chat/message")
public void newUserMessage(String json) throws IOException {
messagesProcessor.processUserMessage(json);
}
}
Ich weiß, wenn ich eine Klasse verwendet hätte, die sich von TextWebSocketHandler aus erstreckt, hätte ich die Möglichkeit, Methoden zu überschreiben, die beim Verbinden und Trennen des Clients aufgerufen werden, aber ich glaube nicht, dass dies mit dem sock-js-Client funktionieren wird. Vielen Dank.
Die StompSubProtocolHandler
Geräte, afterSessionEnded()
die von der aufgerufen werden WebSocketHandler.afterConnectionClosed()
. Und der erstere gibt ein Ereignis wie dieses ab:
/**
* Event raised when the session of a WebSocket client using a Simple Messaging
* Protocol (e.g. STOMP) as the WebSocket sub-protocol is closed.
*
* <p>Note that this event may be raised more than once for a single session and
* therefore event consumers should be idempotent and ignore a duplicate event.
*
* @author Rossen Stoyanchev
* @since 4.0.3
*/
@SuppressWarnings("serial")
public class SessionDisconnectEvent extends AbstractSubProtocolEvent {
Was Sie also brauchen, ist ein ApplicationListener
dafür SessionDisconnectEvent
und alle Informationen sind in der Veranstaltung vorhanden.