So erkennen Sie, dass der Client die Verbindung zum Websocket im Frühjahr mvc getrennt hat


Dmytro Kostyushko

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.

Artem Bilan

Die StompSubProtocolHandlerGerä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 ApplicationListenerdafür SessionDisconnectEventund alle Informationen sind in der Veranstaltung vorhanden.

Verwandte Artikel


So verwalten Sie die Sitzung im Frühjahr mvc

Sonnenfänger Mein Problem ist folgendes: Ich muss die Anmelde- / Abmeldefunktion mit Spring mvc implementieren. Mein Ansatz ist wie folgt. Ich habe einen LoginController, der Get- und Post-Methoden handhabt. @RequestMapping(value = "/login", method = RequestMe

So iterieren Sie die Liste der Objekte im Frühjahr

Bhanu Krishnan: public class Members { private String fname; private String lname; public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public String getLn

So erkennen Sie nicht verwendete Eigenschaften im Frühjahr

Rolf: Ich arbeite an einem Spring 2.0-Projekt ohne Anmerkungen. Wir verwenden mehrere PropertyPlaceholderConfigurer-Beans mit unterschiedlichen Vor- und Suffixen, um Eigenschaften aus verschiedenen Eigenschaftendateien zu laden. Das funktioniert wunderbar. Auf