2013-07-13 13 views
8

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  
+1

Czy jest to związane z tym, co robisz? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan

+0

Absolutnie, ale jeśli to możliwe, chcę uniknąć używania skręconego lub tornada z tym projektem. –

+0

Powinieneś porzucić gunicorn na rzecz uwsgi. – user37203

Odpowiedz