Comet-style Webapp in reinem Python?
Verfasst: Sonntag 23. November 2008, 10:57
Gibt es eine reine Python-Lösung, um Comet-style Anwendungen zu bauen? Ich hätte gedacht, vielleicht im Rahmen von CherryPy, aber da habe ich nur einen Hinweis auf ein Tutorial zusammen mit Orbited gefunden.
In einem Beispiel für ein Webrahmenwerk für Clojure habe ich folgenden Code gefunden:
Dies definiert die zwei Request-Handler auf der Serverseite: Fragt ein Client nach der URL "/messages" und übergibt den Index der letzten Nachricht, die er kennt, antwortet der Server entweder mit einer Liste der neuen Nachrichten oder aber friert mit "suspend-request" die Verarbeitung ein, bis das Signal "messages" ertönt.
Wird an die URL "/message" eine neue Nachricht geschickt, wird sie zur Datenbasis hinzugefügt und dann werden alle eingefrorenen Handler erneut durchlaufen, indem sie mit "resume-requests" und dem Signal "messages" wieder erweckt wurden.
Ich finde das recht elegant und auch der client-seitige JavaScript-Code dazu ist einigermaßen übersichtlich. Je nach Browser wird per IFRAME oder XHR die URL "/messages" gepollt.
Clojure nutzt offenbar das in den Java-basierten Servlet-Container Jetty eingebauten Support für das Anhalten von Requests, was dort als (IMHO fälschlich) Continuations bezeichnet wird, obwohl es nicht an der entsprechenden Stelle weitergeht, sondern der Request neu durchlaufen wird.
Muss ich Python untreu werden?
Stefan
In einem Beispiel für ein Webrahmenwerk für Clojure habe ich folgenden Code gefunden:
Code: Alles auswählen
(GET "/messages"
(let [index (parse-int (params :index))]
(locking request
(unless (messages-waiting? index)
suspend-request :messages))
(json (messages-from index))))
(POST "/message"
(add-message (params :message))
(resume-requests :messages))
Wird an die URL "/message" eine neue Nachricht geschickt, wird sie zur Datenbasis hinzugefügt und dann werden alle eingefrorenen Handler erneut durchlaufen, indem sie mit "resume-requests" und dem Signal "messages" wieder erweckt wurden.
Ich finde das recht elegant und auch der client-seitige JavaScript-Code dazu ist einigermaßen übersichtlich. Je nach Browser wird per IFRAME oder XHR die URL "/messages" gepollt.
Clojure nutzt offenbar das in den Java-basierten Servlet-Container Jetty eingebauten Support für das Anhalten von Requests, was dort als (IMHO fälschlich) Continuations bezeichnet wird, obwohl es nicht an der entsprechenden Stelle weitergeht, sondern der Request neu durchlaufen wird.
Muss ich Python untreu werden?
Stefan