Gunicorn を使用して WebSockets と通常の WSGI ビューを 1 つの (Flask) アプリで一緒に処理することは可能ですか?
Gevent WSGI サーバーを使用して websockets を機能させる方法を知っています。Gunicorn と gevent ワーカーを使用して通常の WSGI アプリを実行できますが、Gunicorn を使用して 1 つのアプリから 2 つを一緒に提供しようとすると、エラーが発生します。
ValueError: ビュー関数が応答を返しませんでした
gunicorn を使用して、1 つのアプリから 2 つを提供することは可能ですか? 私は最終的にこれをすべてnginxの背後に置くことを計画しています.ソケットを別のアプリに分割して2つのアプリを通信させることは嫌いではありません. それまでは、このようにする方法はありますか?
編集:
これを機能させる方法を見つけました。重要なのは、1) gevent のロギング機能を変更すること、および 2) geventWebSocketWorker クラスのワーカーを使用していることを gunicorn に指定することです。
このサイトでこの回答の一部を見つけました: http://d.hatena.ne.jp/Malan/20121007
記録として、1 つのサーバーで tornado/twisted/autobahn を実行し (Jordan に感謝)、もう 1 つのサーバーで私の 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