Da niemand eine Lösung für die diese Stelle sowie die Tatsache, dass ich dringend eine Lösung brauche, hier ist meine Situation und einige abstrakte Lösungen/Ideen zur Diskussion.
Mein Stapel:
- Tornado
- Sellerie
- MongoDB
- Redis
- RabbitMQ
Mein Problem: Einen Weg finden, wie Tornado eine Celery-Aufgabe versenden kann (gelöst) und dann asynchron das Ergebnis sammeln kann (irgendwelche Ideen?).
Szenario 1: (Anfrage/Antwort-Hack plus Webhook)
- Tornado empfängt eine (Benutzer-)Anfrage, speichert dann im lokalen Speicher (oder in Redis) eine { jobID : (Benutzer-)Anfrage}, um sich zu merken, wohin die Antwort weitergeleitet werden soll, und löst eine celery-Aufgabe mit jobID aus
- Wenn celery die Aufgabe abgeschlossen hat, führt es einen Webhook an einer URL aus und teilt tornado mit, dass dieser JobID abgeschlossen ist (plus die Ergebnisse)
- Tornado ruft die (Benutzer)anfrage ab und leitet eine Antwort an den (Benutzer) weiter
Kann das passieren? Hat es irgendeine Logik?
Szenario 2: (Tornado plus Langpolling)
- Tornado schickt die Celery-Aufgabe los und gibt einige primäre json-Daten an den Client zurück (jQuery)
- jQuery tut einige lange-Polling nach Erhalt der primären json, sagen wir, alle x Mikrosekunden, und Tornado Antworten nach einigen Datenbank-Flag. Wenn die Celery-Aufgabe abgeschlossen ist, wird dieses Datenbank-Flag auf True gesetzt, und die jQuery-Schleife ist beendet.
Ist das effizient?
Irgendwelche anderen Ideen/Schemata?