WebSockets и WSGI вместе через Gunicorn

Можно ли использовать Gunicorn для обработки WebSockets и обычных представлений WSGI вместе в одном приложении (Flask)?

Я знаю, как заставить веб-сокеты работать с помощью сервера Gevent WSGI, и я могу получить обычное приложение WSGI, работающее с Gunicorn, с рабочими gevent, но когда я пытаюсь обслуживать их вместе из одного приложения с помощью Gunicorn, я получаю сообщение об ошибке:

ValueError: функция просмотра не вернула ответ

Можно ли обслуживать двоих из одного приложения, используя пушку? В конечном итоге я планирую поставить все это за nginx, и я не против разделить сокет на другое приложение и заставить их общаться, если это не требует слишком много дополнительных системных ресурсов. До тех пор, есть ли способ сделать это таким образом?

РЕДАКТИРОВАТЬ:

Я понял, как заставить это работать. Ключевым моментом является 1) изменить функцию ведения журнала для gevent и 2) обязательно указать пушке, что я использую рабочие класса geventWebSocketWorker.

Я нашел часть этого ответа на этом сайте: http://d.hatena.ne.jp/Malan/20121007

Для справки, я думаю, что лучше иметь один сервер, на котором работает tornado/twisted/autobahn (спасибо, Джордан), а другой — мой материал WSGI. Но это не то, что я хотел здесь :)

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       

person Moshe Bildner    schedule 13.07.2013    source источник
comment
Это связано с тем, что вы делаете? stackoverflow.com/ вопросы/13137449/   -  person Jordan    schedule 14.07.2013
comment
Безусловно, но я хочу по возможности избегать использования скрученных или торнадо в этом проекте.   -  person Moshe Bildner    schedule 22.07.2013
comment
Вы должны отказаться от gunicorn в пользу uwsgi.   -  person user37203    schedule 19.11.2014
comment
@user37203 user37203 Можете ли вы дать больше контекста для этого предложения?   -  person Moshe Bildner    schedule 19.11.2014
comment
uwsgi быстрее, стабильнее и меньше, чем gunicorn. это сервер wsgi, написанный на C, который может запускать приложения python wsgi несколькими способами. У Nginx есть бэкэнд uwsgi, и это рекомендуемый способ его запуска. ngnix -> uwsgi -> приложение python Просто попробуйте, оно постепенно становится отраслевым стандартом.   -  person user37203    schedule 20.11.2014


Ответы (1)


Flask-Sockets может оказаться полезным.

person Andrew    schedule 05.01.2015