使用套接字从烧瓶到 JS 的通知呼



我正在使用 Flask-SocketIO 库,它工作正常,但我需要向 socket.io 装饰器的外部发送发出通知,这真的很痛苦。查看解决方案,许多人使用 rabbitmq 或 redis,但我不知道如何使用它们。

这是我的代码:

from flask import Flask, render_template
from flaskwebgui import FlaskUI
from flask_socketio import SocketIO, emit
app = Flask(__name__)
async_mode = None
app.config['SECRET_KEY'] = 'hello'
socketio = SocketIO(app, async_mode=async_mode, message_queue='amqp:///socketio')
def run_sock(): 
socketio.run(app, debug=True)
ui = FlaskUI(app, fullscreen=True, server=run_sock,)
@app.route("/")
def index():  
return render_template('index.html')
@socketio.on('test', namespace='/test')
def test():
print("test")
if __name__ == "__main__":
ui.run()
io = SocketIO(message_queue='amqp:///socketio')
io.emit('test_emit', {'data': 'toto'}, namespace='/test')

我的 JS 前端永远不会收到test_emit消息,我该怎么办?

发出的问题在于它出现在ui.run()调用下方,直到您关闭应用程序才会返回。将 emit 移动到应用程序中在服务器运行时执行的任何函数(例如 Flask 视图函数(,它应该可以正常工作。

为什么在同一进程中有两个SocketIO对象?在脚本顶部附近定义的socketio实例可以在流程中的任何位置使用,无需创建第二个实例。对于此问题,您不需要使用消息队列,因为您在单个进程中具有 Socket.IO 的所有用法。

最新更新