1

だから私はFlask_Socketを使ってFlaskにwebsocketを実装しようとしています。これを使用して、データの一部が変更されるたびに、接続されているすべてのクライアントに通知したいと考えています。これが私の単純化したものroutes/index.pyです。私が抱えている問題は、websocket 接続が開かれるとnotify_change、ソケットが閉じられるまでループにとどまり、その間、他のルートなど/usersにアクセスできないことです。

from flask_sockets import Sockets
sockets = Sockets(app)

@app.route('/users',methods=['GET'])
def users():
     return json.dumps(get_users())

data = "Some value" # the piece of data to push
is_dirty = False # A flag which is set by the code that changes the data
@sockets.route("/notifyChange")
def notify_change(ws):
    global is_dirty, data
    while not ws.closed:
        if is_dirty:
            is_dirty = False
            ws.send(data)

これは本質的には通常の結果のようですがwhile True:、私はまだ使用中にこれを回避する方法をオンラインで探していましたflask_socketsが、運がありませんでした. GUnicornでサーバーを実行しています

flask/bin/gunicorn -b '0.0.0.0:8000' -k flask_sockets.worker app:app

実行してスレッドを追加しようとしまし--threads 12たが、うまくいきませんでした。

注:一度に最大 4 人のユーザーにしかサービスを提供していないため、スケーリングは必須ではなく、ソリューションを極度に最適化する必要もありません。

4

0 に答える 0