我正在使用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)
});
}
1条答案
按热度按时间xfb7svmp1#
感谢Miguel的评论(事实上,感谢他在网络上对Flask的出色支持!)
解决方案是将
message_queue
和channel
添加到SocketIO构造函数中。例如: