簡體   English   中英

使用 socket.IO 從 Flask 到 JS 的通知

[英]Notification from Flask to JS using socket.IO

我正在使用工作正常的 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 消息,我該怎么辦?

您的 emit 問題在於它出現在ui.run()調用下方,直到您關閉應用程序才會返回。 將發射移動到服務器運行時執行的應用程序中的任何 function(例如 Flask 視圖函數),它應該可以正常工作。

為什么在同一個進程中有兩個SocketIO對象? 您在腳本頂部附近定義的socketio實例可以在進程中的任何地方使用,無需創建第二個實例。 對於這個問題,您不需要使用消息隊列,因為您在單個進程中擁有 Socket.IO 的所有用法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM