Speicher

Die Speicher Die Schnittstelle definiert eine pro Sitzung key-value Speicherabstraktion für socketio4j. Sie ermöglicht es Transports, Namespaces und Benutzercode, kleine stückweise sitzungsbezogene Metadaten wie Benutzer-IDs, Authentifizierungstoken, Verbindungszustand oder Hinweise zur Raumzugehörigkeit zu persistieren—unabhängig von der tatsächlichen Implementierung des zugrunde liegenden Speichers.

Wesentliche Merkmale

  • Sitzungsgebundener Speicher — eine Store-Instanz existiert pro verbundener Client-Sitzung

  • Key-Value-Semantik — beliebige Objekte, die mit String-Schlüsseln verknüpft sind

  • Backend-agnostisch — Implementierungen können Speicher im Arbeitsspeicher, Hazelcast, Redis oder andere Datenspeicher verwenden

  • Lebenszyklusbewusst — wird zerstört, wenn der zugrunde liegende Client die Verbindung trennt

  • Typ-sichere Abfrage — zurückgegebene Werte können gecastet oder generisch typisiert werden

Funktionsweise

  • set verknüpft einen Wert mit einem Schlüssel für die Lebensdauer der Sitzung

  • get gibt einen gespeicherten Wert zurück, oder null falls nicht vorhanden

  • has prüft das Vorhandensein eines Schlüssels, ohne den Wert zu laden

  • del entfernt einen einzelnen Schlüssel-Wert-Eintrag

  • destroy entfernt alle Einträge und macht die Store-Instanz ungültig

Anwendungsszenarien

Fall
Beispiel

Authentifizierung

speichern "userId", "tenant", "tokenClaims"

Hinweise zur Wiederverbindung

speichern "rooms" oder benutzerdefinierte Metadaten

Benutzerdefinierte Handshake-Parameter

persistiere Benutzermetadaten aus Upgrade/Handshake

Namespaced-Logik

hänge Zustand an, der nur während der aktuellen Sitzung benötigt wird

Vorteile

👍 Funktioniert einheitlich in geclusterten und eigenständigen Modi 👍 Hält Sitzungsmetadaten auf jede Verbindung isoliert 👍 Ermöglicht das Wechseln des Speicher-Backends ohne Änderungen im Benutzercode 👍 Unterstützt leichtgewichtigen In-Memory-Betrieb für Einzelknoten-Deployments

Einschränkungen

ℹ️ Nicht für große Objekte oder binären Speicher vorgesehen ℹ️ Kein verteiltes Datenmodell an sich — Verteilung hängt von der Implementierung ab ℹ️ Keine eingebaute TTL oder Ablauffunktion über den Sitzungslebenszyklus hinaus ℹ️ Nicht zwischen Sitzungen geteilt, es sei denn, es wird von gemeinsamem Speicher unterstützt


Backend-Verhalten

Backend
Persistenz
Sichtbarkeit
Eigenschaften

Im Arbeitsspeicher

Flüchtig, wird bei Trennung oder JVM-Neustart gelöscht

Nur lokal

Am schnellsten, am besten für Einzelknoten

Hazelcast / Redis(redis, valkey, dragonflydb)

Verteilt (abhängig von der Backend-Konfiguration)

Auf Knoten übergreifend zugänglich

Empfohlen für Multi-Knoten-Deployments


Lebenszyklusgarantie

Eine Store-Instanz lebt genau für eine Client-Sitzung und wird zerstört, wenn die Sitzung endet. Nach dem Aufruf von destroy()darf nicht erneut auf den Store zugegriffen werden.

Wird automatisch aufgerufen, wenn der Client die Verbindung trennt.

Beispiel

Zuletzt aktualisiert

War das hilfreich?