Использование gevent и Flask для реализации websocket, как достичь параллелизма?

Поэтому я использую Flask_Socket, чтобы попытаться реализовать веб-сокет на Flask. Используя это, я надеюсь уведомить всех подключенных клиентов, когда часть данных изменилась. Вот упрощение моего routes/index.py, Проблема, с которой я столкнулся, заключается в том, что при открытии соединения через веб-сокет оно остается в 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 пользователей одновременно, поэтому масштабирование не является обязательным требованием, и решение не нуждается в ультраоптимизации.

0 ответов

Другие вопросы по тегам