2012-10-30 13 views
15

Sto lavorando a un esperimento scientifico in cui circa due dozzine di persone di test giocano un gioco a turni con/contro l'altro. Al momento, è un'app web Python con un'interfaccia WSGI. Mi piacerebbe aumentare l'usabilità con i websocket: quando tutti i giocatori hanno finito i loro turni, vorrei avvisare tutti i clienti di aggiornare il loro stato. In questo momento, tutti devono attendere il timeout del turno, o ricaricare continuamente e attendere che il messaggio di errore "è ancora in corso" non venga più visualizzato (occupato in attesa, in modo efficace).Combinare websockets e WSGI in un'applicazione python

Ho letto la documentazione di più librerie di websocket e ho capito come funzionano i websocket, ma non sono sicuro dell'architettura per il mix di WSGI e websocket: Posso avere un websocket e un server WSGI nello stesso processo (e se quindi, come, usando davvero qualsiasi libreria websockets) e basta chiamare my_websocket.send_message() da un gestore WSGI, o dovrei avere un server websockets separato e fare qualche IPC? O non dovrei mescolarli affatto?

modificare, 6 mesi più tardi: ho finito per iniziare un processo server WebSockets separati (tramite autostrada), invece di integrarlo con il server WSGI. La ragione era che è molto più semplice e più pulito separare loro due e parlare al server websockets dal processo WSGI (comunicazione da server a server) era semplice e funzionava al primo tentativo usando websocket-client.

+0

Quale framework web Python stai usando, se ne stai usando uno? – John

+0

Nessuno al momento, ma sono aperto a qualsiasi suggerimento. – Simon

+0

beh in quel caso ho il secondo suggerimento di Oberstet di usare la fiaschetta. – John

risposta

14

Ecco un esempio che fa quello che si vuole:

Corre un'applicazione WSGI web (Flask-based in questo caso, ma può essere qualsiasi cosa WSGI conforme) più un Server WebSocket con 1 server e 1 porta.

È possibile inviare messaggi WS da gestori Web. Autobahn fornisce anche PubSub su WebSocket, che semplifica notevolmente l'invio di notifiche (tramite WampServerProtocol.dispatch) come nel tuo caso.

Disclosure: Io sono autore di Autobahn e lavorare per Tavendo.

+0

Fantastico, è esattamente quello che stavo cercando! Inoltre, non conoscevo ancora i protocolli su Websockets. – Simon

+0

Per una rapida introduzione a WAMP (= RPC + PubSub su WebSocket), controlla http://wamp.ws/ – oberstet

+0

Link gitub rotto e la nuova versione non sembra essere un'app WSGI ... – pjz