Использование 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 пользователей одновременно, поэтому масштабирование не является обязательным требованием, и решение не нуждается в ультраоптимизации.