2017-06-02 5 views
0

Ich versuche, meine Flask-App so einzurichten, dass RabbitMQ als Nachrichtenwarteschlange verwendet wird. Es funktioniert gut, wenn ich Nachrichten vom Server ausliege, aber wenn ich versuche, Nachrichten auszugeben passiert nichts. Es scheint, als ob der Front-End-Socket nicht mit der Warteschlange kommuniziert.Flask-SocketIO empfängt keine Nachrichten vom Frontend, wenn es mit RabbitMQ verwendet wird

Mein Socket-Code sieht wie folgt aus:

from flask_socketio import emit, SocketIO 

socketio_mp = SocketIO(message_queue='amqp://guest:[email protected]:5672//') 

@socketio_mp.on('connected', namespace='/test') 
def joined(): 
    """Sent by clients when they enter a room. 
    A status message is broadcast to all people in the room.""" 
    print('connected') 

Der Sockel richtig in den Kolben-SocketIO docs wie gezeigt initialisiert. Das Ereignis connected wird nie ausgelöst, obwohl es vom Frontend ausgegeben wird.

var namespace = "/test"; 
socket = io.connect(location.protocol + "//" + document.domain + ":" + location.port + namespace); 

socket.on("connect", function() { 

    console.log("connected"); 
    socket.emit("connected", {msg: "next"}); 
}); 

Ich bekomme auch keine Fehler in der Konsole.

+0

Der angegebene Code zeigt nicht, wie Sie die App ausführen. Wie in den Flask-SocketIO-Dokumenten angegeben, sollten Sie die App über 'socketio.run()' ausführen, indem Sie den Flask 'app.run()' umschließen. – farzad

+0

@farzad Ich initialisiere die App tatsächlich richtig. Die App funktioniert, wenn die Nachrichtenwarteschlange nicht hinzugefügt wird. –

+0

Die Problemadresse hier https://github.com/miguelgrinberg/Flask-SocketIO/issues/248 –

Antwort

1

Wenn Sie Ihre SocketIO Instanz erstellen, müssen Sie Ihre Flask App als erstes Argument übergeben:

socketio_mp = SocketIO(app, message_queue='amqp://guest:[email protected]:5672//') 

Als Randbemerkung, ich bin nicht sicher, was Sie erwarten, anders zu sein, wenn Sie ein hinzufügen Nachrichtenwarteschlange auf diese Weise. Die Clients sprechen niemals mit der Nachrichtenwarteschlange. Die Warteschlange wird intern verwendet, wenn Sie mehrere Flask-SocketIO-Server oder Emit-Only-Prozesse haben. Clients haben keinen direkten Zugriff auf die Warteschlange.

+0

Ich benutze eine Blueprint-Stil-Flask-App. Funktioniert es noch, wenn ich die 'init_app' Methode verwende? Ich bin mir einfach nicht sicher, warum, wenn ich ein Event auf dem Frontend ausstrahle, es nicht vom Flaschendeckel aufgenommen wird. Und das passiert nur, wenn ich die Nachrichtenwarteschlange hinzufüge. Auch die eingebauten Ereignisse wie 'connect' feuern nicht auf das Backend. –

+0

Sicher, Sie können 'init_app()' auch verwenden. – Miguel

Verwandte Themen