Клиент не получает события от сервера Flask -SocketIO с очередью сообщений Redis - PullRequest
0 голосов
/ 31 марта 2020

Я хочу добавить многопроцессорность к своему Flask -SocketIO серверу, поэтому я пытаюсь добавить очередь сообщений Redis согласно Flask -SocketIO docs . Даже без добавления многопроцессорной обработки клиент не получает никаких событий. Все остальное работает нормально (например, веб-страница обслуживается, выполняются HTTP-запросы, выполняются вызовы базы данных). На передней или задней части нет сообщений об ошибках. До того как я добавил очередь Redis, она работала. Я проверил, что используется маршрут SocketIO 'addname' и что request.sid выглядит правильно. Что я делаю не так?

Очень упрощенный код сервера:

external_sio = SocketIO(message_queue='redis://')

def requester(user, sid):

    global external_sio

    external_sio.emit('addname', {'data': 'hello'}, room=sid)
    # do some stuff with requests and databases
    external_sio.emit('addname', {'data': 'goodbye'}, room=sid)

def main():

    app = Flask(__name__,
                static_url_path='',
                static_folder='dist',
                template_folder='dist')

    socketio = SocketIO(app)

    @socketio.on('addname')
    def add_name(user):
        global external_sio
        external_sio.emit('addname', {'data': 'test'}, room=request.sid)
        requester(user.data, request.sid)

    socketio.run(app, host='0.0.0.0', port=8000)

if __name__ == '__main__':
    main()

Упрощенный код клиента (React Javascript):

const socket = SocketIOClient('ipaddress:8000')
socket.emit('addname', {data: 'somename'})
socket.on('addname', ({data}) => console.log(data))

1 Ответ

1 голос
/ 31 марта 2020

Главный сервер также должен быть подключен к очереди сообщений. На вашем главном сервере сделайте это:

socketio = SocketIO(app, message_queue='redis://')

На вашем внешнем процессе сделайте следующее:

external_sio = SocketIO(message_queue='redis://')  # <--- no app on this one
...