Trennen Sie die Clientsitzung vom Spring websocket stomp server

8

Ich habe ziemlich viel gesucht und konnte das nicht finden: Gibt es eine Möglichkeit, dass ein Feder-Websocket-Stomp-Server einen Client basierend auf der Session-ID trennen kann (oder wirklich auf irgendetwas basiert)?

Es scheint mir, dass, sobald ein Client sich mit einem Server verbindet, nichts den Server vom Client trennen lässt.

    
user1751547 16.02.2015, 23:17
quelle

3 Antworten

1

Soweit ich weiß, bietet die API nicht das, was Sie suchen. Auf der Serverseite können Sie nur Trennereignisse erkennen. Wenn Sie einen bestimmten Client trennen möchten, müssen Sie eine kleine Problemumgehung, z. dieser:

  1. Schreiben Sie eine clientseitige JavaScript-Funktion, die eine Trennung auslösen kann
  2. Sobald Ihr Client mit dem Server verbunden ist, generieren Sie eine Client-ID in Ihrem Javascript und senden diese an den Server. Merken Sie sich die ID auf dem Client, Sie benötigen sie in Schritt (4).
  3. Zu der Zeit, zu der der Server die Verbindung zu dem bestimmten Client (identifiziert durch die ID) trennen soll, senden Sie eine Nachricht mit der ID zurück an den Client.
  4. Nun wertet Ihr Client javascript die Nachricht aus, die vom Server gesendet wurde, und entscheidet sich, die in Schritt (1) geschriebene Trennfunktion aufzurufen.
  5. Ihr Client trennt sich selbst.

Die Problemumgehung ist ein wenig umständlich, aber es funktioniert.

    
mika 20.02.2015, 10:10
quelle
8

Mit einigen Workarounds können Sie erreichen, was Sie wollen. Dafür sollten Sie tun:

  1. Verwenden Sie Java-Konfiguration (nicht sicher, ob es mit XML-Konfiguration möglich ist)
  2. Erweitern Sie Ihre Konfigurationsklasse von WebSocketMessageBrokerConfigurationSupport und implementieren Sie die WebSocketMessageBrokerConfigurer -Schnittstelle
  3. Erstellen Sie ein benutzerdefiniertes Sub-Protokoll-Websocket-Handler und erweitern Sie es von SubProtocolWebSocketHandler Klasse
  4. In Ihrer benutzerdefinierten Subprotokoll-Websocket-Handler-Überschreibung afterConnectionEstablished -Methode haben Sie Zugriff auf WebSocketSession:)

Ich habe ein Beispiel für ein Spring-Boot-Projekt erstellt, um zu zeigen, wie wir die Client-Sitzung von der Serverseite trennen können: Ссылка

    
isaranchuk 28.08.2015 11:38
quelle
2

Sie können die Sitzung auch trennen, indem Sie eine benutzerdefinierte WebSocketHandlerDecorator :

implementieren %Vor%     
Dániel Kis 14.01.2017 19:54
quelle