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
setverknüpft einen Wert mit einem Schlüssel für die Lebensdauer der Sitzunggetgibt einen gespeicherten Wert zurück, odernullfalls nicht vorhandenhasprüft das Vorhandensein eines Schlüssels, ohne den Wert zu ladendelentfernt einen einzelnen Schlüssel-Wert-Eintragdestroyentfernt alle Einträge und macht die Store-Instanz ungültig
Anwendungsszenarien
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
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?