websocket Flask-Socketio消息从辅助脚本发送到Web脚本时未被接收

7gyucuyw  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(163)

我正在使用flask-socketio在我的Flask应用程序上实现websockets。一个密集的函数运行在一个worker脚本上,当它完成时应该向websocket发送一条消息。然后该消息应该被客户端接收并用于更新显示。
我遇到的问题是从worker脚本发送的消息没有被客户端接收到。从Flask应用程序内部发送的相同消息被接收到。我假设问题是两个不同的脚本有不同的WebSocket连接;我怎么让他们互相交谈?

worker.py(在Flask应用程序之外运行)-客户端不会收到此消息

socketio.emit('edit_plan', {'data': 'testing test'})

main.py(在Flask应用程序内运行)-这确实会被客户端接收

@app.route("/home", methods=['POST', 'GET'])
@login_required
@register_breadcrumb(app, '.', 'Home')
def home():
    # Send websocket test message
    print("Emitting test messages")
    socketio.emit('edit_plan', {'data': 'testing test'})

前端

componentDidMount() {
    const that = this ;

    // Connect to websocket and await message
    const socket = io();

    socket.on('connect', function() {
      console.log("Connected to websocket")
      console.log(socket.id)
    });

    socket.on('edit_plan', function(msg, cb) {
      console.log(msg)
      alert(msg)
    });
}
xfb7svmp

xfb7svmp1#

感谢Miguel的评论(事实上,感谢他在网络上对Flask的出色支持!)
解决方案是将message_queuechannel添加到SocketIO构造函数中。例如:

socketio = SocketIO(app, cors_allowed_origins="*", 
message_queue=os.environ.get('REDIS_URL'), channel='channel_name')

相关问题