2013-07-13 5 views
8

Est-il possible d'utiliser Gunicorn pour gérer des vues WebSockets et WSGI standard dans une application (Flask)? Je sais comment faire fonctionner des websockets en utilisant le serveur Gevent WSGI, et je peux obtenir une application WSGI standard fonctionnant avec Gunicorn, avec des travailleurs de gevent, mais quand j'essaie de les servir ensemble à partir d'une application utilisant Gunicorn, je reçois une erreur:WebSockets et WSGI ensemble via Gunicorn

ValueError: View function did not return a response

Est-il possible de servir les deux d'une application, en utilisant gunicorn? Je prévois de mettre tout cela derrière nginx, et je ne suis pas opposé à la scission du socket dans une autre application et à ce que les deux communiquent, tant que cela n'exige pas trop de ressources système supplémentaires. D'ici là, y a-t-il un moyen de le faire de cette façon?

EDIT:

je me suis dit comment obtenir ce travail. La clé est 1) changer la fonction de journalisation pour gevent et 2) assurez-vous de spécifier à gunicorn que j'utilise les travailleurs de la classe geventWebSocketWorker.

Je trouve une partie de cette réponse sur ce site: http://d.hatena.ne.jp/Malan/20121007

Pour mémoire, je pense qu'il est probablement une meilleure idée d'avoir un serveur tornade en cours d'exécution/twisted/autobahn (merci Jordan) et un autre en cours d'exécution mes affaires WSGI . Mais ce n'est pas ce que je voulais ici :)

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

Est-ce lié à ce que vous faites? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan

+0

Absolument, mais je veux éviter d'utiliser tordu ou tornade avec ce projet, si possible. –

+0

Vous devriez abandonner gunicorn en faveur d'uwsgi. – user37203

Répondre