È 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
È correlato a ciò che stai facendo? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan
Assolutamente, ma voglio evitare l'uso di twistato o tornado con questo progetto, se possibile. –
Dovresti abbandonare Gunicorn in favore di uwsgi. – user37203