Was ist der richtige Weg, um Redis-Verbindung in Tornado zu behandeln? (Asynchron - Pub / Sub)

8

Ich verwende Redis zusammen mit meiner Tornado-Anwendung mit dem Asyc-Client Brukva, als ich mir die Beispiel-Apps auf der Brukva-Site anschaute, machen sie eine neue Verbindung mit der Methode init in Websocket

%Vor%

ist im Fall von Websocket gut, aber wie man es in der üblichen Tornado RequestHandler-Post-Methode behandelt, sagen lange Polling-Operationen (publish-subscribe-Modell) . Ich mache neue Client-Verbindung in jeder Post-Methode von Update-Handler ist dies der richtige Ansatz? Wenn ich an der Redis-Konsole checke, sehe ich, dass Clients in jeder neuen Postoperation zunehmen.

Hier ist ein Beispiel meines Codes.

%Vor%

Ich schätze es, wenn Sie einen Beispielcode für einen ähnlichen Fall bereitstellen.

    
Burak Dede 11.12.2011, 19:35
quelle

2 Antworten

9

Ein bisschen spät, aber ich benutze tornado-redis . Es funktioniert mit Tornados ioloop und dem Modul tornado.gen

Installieren Sie tornadoredis

Es kann von pip

installiert werden %Vor%

oder mit setuptools

%Vor%

Aber du solltest das wirklich nicht tun. Sie könnten das Repository auch klonen und extrahieren. Dann führe

aus %Vor%

Verbinden Sie sich mit redis

Der folgende Code wird in main.py oder äquivalent verwendet

%Vor%

redis.connect wird nur einmal aufgerufen. Es ist ein blockierender Anruf, daher sollte er vor dem Start des Haupt-Iloops aufgerufen werden. Dasselbe Verbindungsobjekt wird von allen Handlern gemeinsam genutzt.

Sie können es Ihren Anwendungseinstellungen wie

hinzufügen %Vor%

Verwenden Sie tornadoredis

Die Verbindung kann in Handlern in self.settings['redis'] verwendet werden oder sie kann als eine Eigenschaft von BaseHandler und der Unterklasse dieser Klasse für andere Request-Handler hinzugefügt werden.

%Vor%

Um mit redis zu kommunizieren, werden die Dekoratoren tornado.web.asynchronous und tornado.gen.engine verwendet

%Vor%

Zusätzliche Informationen

Weitere Beispiele und andere Funktionen wie Verbindungspooling und Pipelines finden Sie im github repo.

    
Ananth 10.02.2013 17:44
quelle
2

Sie sollten die Verbindungen in Ihrer App bündeln. da es so aussieht, als würde brukva dies nicht automatisch unterstützen (redispy unterstützt dies, blockiert aber von Natur aus, so dass es nicht gut mit Tornado zusammenpasst), müssen Sie Ihren eigenen Verbindungspool schreiben.

Das Muster ist jedoch ziemlich einfach. etwas in dieser Richtung (das ist kein echter Betriebscode):

%Vor%

es kann ein bisschen schwieriger sein, aber das ist die Hauptidee.

    
Not_a_Golfer 29.02.2012 14:14
quelle