Можно ли использовать 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