Kombinieren von Websockets und WSGI in einer Python App

Ich arbeite an einem wissenschaftlichen Experiment, wo etwa zwei Dutzend Testpersonen ein Turn-basiertes Spiel mit / gegeneinander spielen. Im Moment ist es eine Python Web App mit einer WSGI Schnittstelle. Ich möchte die Usability mit Websockets erweitern: Wenn alle Spieler ihre Wendungen beendet haben, möchte ich alle Clients benachrichtigen, um ihren Status zu aktualisieren. Im Moment muss jeder auf den Turn Timeout warten oder ständig neu laden und auf die "Wende ist noch im Gange" warten. Fehlermeldung nicht wieder erscheinen (beschäftigtes Warten, effektiv).

Ich las durch mehrere Webserver-Bibliotheken-Dokumentation und ich verstehe, wie Websockets funktionieren, aber ich bin mir nicht sicher über die Architektur zum Mischen von WSGI und Websockets: Kann ich ein Websockets und einen WSGI-Server im selben Prozess haben (und wenn ja, wie, Verwenden Sie wirklich irgendwelche Websockets Bibliothek) und rufen my_websocket.send_message() einfach my_websocket.send_message() von einem WSGI-Handler, oder sollte ich einen separaten Websockets-Server und einige IPC? Oder sollte ich sie überhaupt nicht mischen?

Bearbeiten, 6 Monate später: Ich habe am Ende eines 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 Gespräch mit dem Websocketserver vom WSGI-Prozess (Server-zu-Server-Kommunikation) war einfach und arbeitete am ersten Versuch mit dem Webserver-Client .

  • Tornado - Bergflasche ca
  • One Solution collect form web for “Kombinieren von Websockets und WSGI in einer Python App”

    Hier ist ein Beispiel, das tut, was Sie wollen:

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

    Sie können WS-Nachrichten aus Web-Handlern senden. Autobahn bietet auch PubSub oben auf WebSocket, was das Senden von Benachrichtigungen (via WampServerProtocol.dispatch ) wie in Ihrem Fall erheblich vereinfacht.

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

    Python ist die beste Programmiersprache der Welt.