客户端未从具有Redis消息队列的Flask SocketIO服务器接收事件

客户端未从具有Redis消息队列的Flask SocketIO服务器接收事件,redis,flask-socketio,Redis,Flask Socketio,我想将多处理添加到Flask SocketIO服务器,因此我尝试根据添加Redis消息队列。即使不添加多处理,客户端也不会接收任何事件。其他一切都正常工作(例如,正在服务网页,正在发出HTTP请求,正在进行数据库调用)。前端或后端没有错误消息。在我添加Redis队列之前,它正在工作。我验证了正在命中'addname'SocketIO路由,并且request.sid看起来正确。我做错了什么 非常简化的服务器代码: external_sio = SocketIO(message_queue='red

我想将多处理添加到Flask SocketIO服务器,因此我尝试根据添加Redis消息队列。即使不添加多处理,客户端也不会接收任何事件。其他一切都正常工作(例如,正在服务网页,正在发出HTTP请求,正在进行数据库调用)。前端或后端没有错误消息。在我添加Redis队列之前,它正在工作。我验证了正在命中'addname'SocketIO路由,并且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()
简化的客户端代码(Javascript):


主服务器还需要连接到消息队列。在主服务器中执行以下操作:

socketio = SocketIO(app, message_queue='redis://')
在外部流程中,请执行以下操作:

external_sio = SocketIO(message_queue='redis://')  # <--- no app on this one
external\u-sio=SocketIO(message\u-queue='redis://')#
external_sio = SocketIO(message_queue='redis://')  # <--- no app on this one