Dies ist eine theoretische Frage, da ich eine Idee über das Konzept habe und noch keinen Code habe.Tornado, Django, Websockets und Session-Synchronisierung
Angenommen, ich verwende Websockets mit Tornado und überbrückt ein Djangoprojekt, das normale Verbindungen verarbeiten würde. Das heißt: Der eigentliche Server ist Tornado, der jede Anfrage erhält und, falls die Anfrage keinen Pfad von/socket hat (etwa), würde der django wsgi-Handler damit umgehen (über einen Fallback-Container). Auf der anderen Seite müssen Anforderungen an/Socket-Pfad ws oder wss-Protokolle haben und von Tornado als Websockets behandelt werden.
Wenn die Verbindung gestartet wird, enthält die erste Anfrage vor dem Upgrade die Cookies, und ich kann die Sitzungs-ID aus den Cookies abrufen und den Session Manager verwenden, um das Sitzungsobjekt nach ID abzurufen. Für den Ablauf dieser Verbindung, die, da es sich um eine Websocket-Verbindung handelt, eine langfristige Verbindung sein wird, werde ich den gleichen Wert für den Sitzungs-ID-Cookie haben (da ich keine Cookie-Header bekomme, weil die Websocket-Verbindung nicht funktioniert) t senden Header nicht mehr - die Idee ist, den Overhead zu reduzieren, und das Übergeben von Cookies mit der Nachricht kann einen enormen Overhead haben).
Es ist bis jetzt ok: Websockets verbinden, senden das Cookie nur einmal, die serverseitige Grenze für diesen Socket kann diesen Cookie-Wert haben (die Session-ID) und damit spielen, bis die Verbindung geschlossen wird.
Meine Frage: Wie kann ich in Echtzeit erkennen, dass eine Sitzung nicht mehr verfügbar ist? (mögliche Gründe: 1. Benutzer hat eine Ressource ausgegeben, die das Schließen der aktuellen Sitzung beinhaltet, obwohl es über AJAX erfolgt und der Websocket nicht geschlossen ist; 2. Sitzung abgelaufen wegen Untätigkeit; 3. irgendwie durch Verwendung von django api ist die Sitzung geschlossen, Obwohl das den aktuellen Ausführungskontext nicht impliziert, wird die Anfrage geschlossen - ich weiß nie, ob ein solches Szenario möglich ist.
Notizen: Wenn eine bestimmte Sitzung geschlossen wurde, konnte ich feststellen, ob die entsprechenden Websockets ebenfalls geschlossen sein müssen.