だから私は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 人のユーザーにしかサービスを提供していないため、スケーリングは必須ではなく、ソリューションを極度に最適化する必要もありません。