Ich habe den folgenden Anwendungsfall für meinen Tornado-Webserver:
Nach POST-Anfragen können Einträge auf dem Server vorgenommen werden, die nicht in einer Datei oder Datenbank gespeichert werden. Bei GET-Anfragen kann ein Prozess gestartet oder beendet werden.
Daher muss ich Daten zwischen verschiedenen Anfragen in meiner RequestHandler
Implementierung teilen. Was ist der normale Weg?
Ich hatte Schwierigkeiten beim Speichern von Daten in self
, zum Beispiel self.entry = "..."
. In einer anderen Anfrage waren die Daten nicht mehr vorhanden.
Die einzige funktionierende Lösung, die ich gefunden habe, ist diese im Anwendungsobjekt zu speichern:
%Vor%und
%Vor%Ist das der richtige Weg? Und was ist mit Synchronisation hier? Ich meine, das bedeutet Zugriff auf geteilte Daten.
Ich schlage folgendes vor: Statt eines Datenbankzugriffsobjekts übergeben Sie ein Objekt, das Ihre Daten speichert, zum Beispiel:
%Vor% mit der folgenden RequestHandler
Initialisierungsmethode.
Sie müssen das Objekt vorher erstellen und übergeben, andernfalls wird es jedes Mal neu erstellt, wenn eine Anfrage bearbeitet wird.
Die Dokumentation bietet eine Möglichkeit, dies zu tun:
%Vor% Dann können Sie Ihr Objekt mydatabase
in einer Datei speichern.
Aber ich bin mir nicht sicher, ob dies der richtige Weg ist, um das zu erreichen, was Sie bezüglich der Synchronisation zwischen Anfragen wünschen.
Anwendung ist das richtige Objekt, um (semi-) persistente Daten zu speichern. Wie auf anderen Seiten empfohlen, sollten Sie jedoch eine Art Datenbank zum Speichern dieser Daten verwenden.
Sie sollten jedoch darauf achten, dass eine Sitzung (oder Transaktion) nicht ordnungsgemäß beendet wird (zB wenn Sie einen POST, aber keinen GET auslösen), sollten Sie die Sitzungsdaten löschen, um Ihren Webserver nicht zu haben Leckspeicher.
Aus meiner Erfahrung schlage ich vor, Redis zu verwenden, da es einfach zu verwenden ist und Schlüsselablauf , ein Mechanismus, der nützlich ist, wenn Sie Sitzungsdaten verwalten müssen.