2012-10-30 4 views
15

Ich arbeite an einem wissenschaftlichen Experiment, bei dem etwa zwei Dutzend Testpersonen ein rundenbasiertes Spiel mit/gegeneinander spielen. Im Moment ist es eine Python-Webanwendung mit einer WSGI-Schnittstelle. Ich möchte die Benutzerfreundlichkeit mit Websockets erweitern: Wenn alle Spieler ihre Runden beendet haben, möchte ich alle Kunden darüber informieren, ihren Status zu aktualisieren. Im Moment muss jeder entweder auf das Turn-Timeout warten oder ständig neu laden und darauf warten, dass die Fehlermeldung "Turn is still in progress" nicht mehr erscheint (busy waiting, effective).Kombinieren von Websockets und WSGI in einer Python-App

Ich lese durch die Dokumentation mehrerer Websocket-Bibliotheken und verstehe, wie Websockets funktionieren, aber ich bin mir nicht sicher über die Architektur zum Mischen von WSGI und websockets: Kann ich einen Websockets und einen WSGI-Server im selben Prozess haben Also, wie, mit wirklich jeder WebSockets-Bibliothek) und rufen Sie einfach my_websocket.send_message() von einem WSGI-Handler, oder sollte ich einen separaten WebSockets-Server und einige IPC tun? Oder sollte ich sie überhaupt nicht mischen?

bearbeiten, 6 Monate später: Ich landete einen separaten Websockets-Server-Prozess (mit Autobahn), anstatt es mit dem WSGI-Server zu integrieren. Der Grund war, dass es viel einfacher und sauberer ist, die beiden zu trennen, und das Sprechen mit dem WebSockets-Server aus dem WSGI-Prozess (Server-zu-Server-Kommunikation) war einfach und funktionierte beim ersten Versuch unter Verwendung von websocket-client. Hier

+0

Welches Python-Webframework verwenden Sie, wenn Sie eines verwenden? – John

+0

Derzeit keine, aber ich bin offen für jeden Vorschlag. – Simon

+0

gut in diesem Fall ich Second obertets Vorschlag, Kolben zu verwenden. – John

Antwort

14

ist ein Beispiel, das tut, was Sie wollen:

Es läuft eine WSGI Web-App (Flask-basierte in diesem Fall aber kann alles sein wsgi konform) sowie ein WebSocket Server unter 1 Server und 1 Port.

Sie können WS-Nachrichten über Web-Handler senden. Autobahn stellt PubSub auch auf WebSocket zur Verfügung, was das Senden von Benachrichtigungen (über WampServerProtocol.dispatch) wie in Ihrem Fall erheblich vereinfacht.

Disclosure: Ich bin der Autor Autobahn und die Arbeit für Tavendo.

+0

Großartig, genau das habe ich gesucht! Außerdem kannte ich noch keine Protokolle über WebSockets. – Simon

+0

Für eine schnelle Einführung in WAMP (= RPC + PubSub über WebSocket), besuchen Sie http://wamp.ws/ – oberstet

+0

Busted gitub Link, und die neue Version scheint keine WSGI-App zu sein ... – pjz