socketio.emit () не делает это для пользователя при вызове из ветки Gevent - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть код, который может отправлять сообщения подключенному пользователю с socketio.emit(), но при выполнении того же действия из потока gevent данные никогда не попадают на клиент.

Пример кода:

from flask import Flask, request, render_template
from flask_socketio import SocketIO, join_room, leave_room, emit
import gevent
from gevent import monkey
monkey.patch_all()

app = Flask(__name__)
app.config['SECRET_KEY'] = '<redacted>'
app.debug = False
socket = SocketIO(app, async_mode="gevent")

def sendStamina(sessionId, stamina):
    # have to use socket.emit here, simply because this function is called from an BG thread.
    with app.test_request_context('/'):
        socket.emit('stamina', {'sessiondId': sessionId, 'stamina': stamina}, room=sessionId)
        print("sent satmina update")

def stamina_update():
    print("stamina update called")
    next_call = time.time()
    while 1:
        print("stamina update called inside")
        next_call = next_call + 1
        gevent.sleep(next_call - time.time())
        sendStamina(<data>, <data>)


t1 = gevent.spawn(game.stamina_update)
t2 = gevent.spawn(start_server)
gevent.joinall([t1, t2])

Я видел несколько тем об этом на SO и форумах socketio, и это сблизило меня, но я все еще что-то упускаю ...

...