2013-07-13 11 views
8

È possibile utilizzare Gunicorn per gestire WebSockets e le normali viste WSGI in un'unica app (Flask)?WebSockets e WSGI insieme tramite Gunicorn

So come far funzionare i websockets utilizzando il server GgiVent WSGI, e posso ottenere una normale app WSGI in esecuzione con Gunicorn, con gevent worker, ma quando provo a servire i due insieme da un'app utilizzando Gunicorn ottengo un errore:

ValueError: View function did not return a response

È possibile servire i due da un'unica app, utilizzando gunicorn? Ho in programma di mettere tutto questo dietro a nginx, e non sono contrario a dividere il socket in un'altra app e far sì che i due comunichino, a patto che ciò non richieda troppe risorse di sistema aggiuntive. Fino ad allora, c'è un modo per farlo in questo modo?

EDIT:

ho capito come ottenere questo lavoro. La chiave è 1) cambiare la funzione di logging per gevent e 2) assicurati di specificare a gunicorn che sto usando i worker della classe geventWebSocketWorker.

ho trovato parte di questa risposta su questo sito: http://d.hatena.ne.jp/Malan/20121007

Per la cronaca, penso che sia probabilmente una migliore idea di avere un server che esegue tornado/contorto/autostrada (grazie Giordania) e un altro in esecuzione la mia roba WSGI . Ma non è quello che volevo qui :)

def log_request(self): 
    log = self.server.log 
    if log: 
     if hasattr(log, "info"): 
      log.info(self.format_request() + '\n') 
     else: 
      log.write(self.format_request() + '\n') 

import gevent   
gevent.pywsgi.WSGIHandler.log_request = log_request 
from geventwebsocket.handler import WebSocketHandler 
from gevent.pywsgi import WSGIServer 

sudo gunicorn -c gunicorn_config.py -k  "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" router:app  
+1

È correlato a ciò che stai facendo? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan

+0

Assolutamente, ma voglio evitare l'uso di twistato o tornado con questo progetto, se possibile. –

+0

Dovresti abbandonare Gunicorn in favore di uwsgi. – user37203

risposta