Combinación de websockets y WSGI en una aplicación de python

Estoy trabajando en un experimento científico en el que unas dos docenas de personas de prueba juegan un juego por turnos entre sí. En este momento, es una aplicación web de Python con una interfaz WSGI. Me gustaría boost la usabilidad con websockets: cuando todos los jugadores hayan terminado su turno, me gustaría notificar a todos los clientes para que actualicen su estado. En este momento, todos tienen que esperar el tiempo de espera del turno o recargar continuamente y esperar a que el mensaje de error “el turno aún está en curso” no aparezca de nuevo (espera activa, efectivamente).

Leí la documentación de varias bibliotecas de websocket y entiendo cómo funcionan los websockets, pero no estoy seguro de la architecture para mezclar WSGI y websockets: ¿Puedo tener un websockets y un servidor WSGI en el mismo proceso (y si es así, cómo? usando realmente cualquier biblioteca de websockets) y simplemente llame a my_websocket.send_message() desde un controlador WSGI, o ¿debería tener un servidor websockets separado y hacer algo de IPC? ¿O no debería mezclarlos en absoluto?

Edición, 6 meses después: terminé iniciando un proceso de servidor websockets separado (utilizando Autobahn), en lugar de integrarlo con el servidor WSGI. La razón fue que es mucho más fácil y limpio separarlos, y hablar con el servidor websockets desde el proceso WSGI (comunicación servidor a servidor) fue sencillo y funcionó en el primer bash con el cliente websocket .

Aquí hay un ejemplo que hace lo que quieres:

Ejecuta una aplicación web WSGI (basada en Flask en este caso, pero puede ser cualquier cosa que cumpla con WSGI) más un servidor WebSocket en 1 servidor y 1 puerto.

Puedes enviar mensajes WS desde los manejadores web. Autobahn también proporciona PubSub sobre WebSocket, que simplifica enormemente el envío de notificaciones (a través de WampServerProtocol.dispatch ) como en su caso.

Divulgación: Soy autor de Autobahn y trabajo para Tavendo.