10

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       
4

1 に答える 1

4

Flask-Socketsが役立つ場合があります。

于 2015-01-05T00:56:30.057 に答える