Czy można używać Gunicorn do obsługi WebSockets i zwykłych widoków WSGI w jednej aplikacji (Flask)?WebSockets i WSGI razem przez Gunicorn
Wiem, jak uruchomić websockets do pracy przy użyciu serwera WSGI Gevent i mogę uzyskać regularną aplikację WSGI działającą z Gunicornem, z robotnikami gevent, ale kiedy próbuję obsłużyć te dwa razem z jednej aplikacji za pomocą Gunicorn dostajemy błąd:
ValueError: View function did not return a response
Czy można obsłużyć dwa z jednej aplikacji, używając gunicorn? W końcu zamierzam umieścić to wszystko za nginxem i nie mam nic przeciwko dzieleniu gniazda na inną aplikację i komunikowaniu się z tymi dwoma, o ile nie wymaga to zbyt wielu dodatkowych zasobów systemowych. Do tego czasu jest jakiś sposób, aby to zrobić w ten sposób?
EDYTOWANIE:
Wymyśliłem, jak to działa. Kluczem jest 1) zmiana funkcji logowania dla gevent i 2) upewnij się, że dla gunicorn określam, że używam pracowników klasy geventWebSocketWorker.
znalazłem część tej odpowiedzi na tej stronie: http://d.hatena.ne.jp/Malan/20121007
Dla przypomnienia, myślę, że to chyba lepszy pomysł, aby mieć jeden serwer z systemem tornado/skręcany/Autobahn (dzięki Jordania), a drugi działa mój WSGI rzeczy . Ale nie tego chciałem tutaj :)
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
Czy jest to związane z tym, co robisz? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan
Absolutnie, ale jeśli to możliwe, chcę uniknąć używania skręconego lub tornada z tym projektem. –
Powinieneś porzucić gunicorn na rzecz uwsgi. – user37203