2015-07-03 7 views
7

In meinem app, ich brauche die client eine room so zu verbinden, dass es kann dann receive Nachrichten von meinem server.Flask SocketIO senden Nachricht vom Server an den Raum

Server-Code

@socketio.on('join', namespace='/test') 
def join(message): 

    join_room(message['room']) 
    room = message['room'] 
    emit('my response', {'data': 'Entered the room ' + message['room']}, room=room) 


@app.route('/scan/user/<int:user_id>/venue/<int:venue_id>', methods = ['POST']) 
@auth.login_required 
def scan_tablet_user_func(user_id, venue_id): 

    room = 'venue_' + str(venue_id) 
    socketio.emit('my response', {'data': json.dumps(my_info, ensure_ascii=False)}, room=room) 

-Client-Code

$('form#join').submit(function(event) { 
      socket.emit('join', {room: $('#join_room').val()}); 
      return false; 
     }); 

Sobald die webpage Lasten, gebe ich "venue_1" in die webpage form"join" berechtigt.

Die variable.auf der server Seite ist ebenfalls auf "venue_1" eingestellt.

Das Problem ist, dass, wenn ich die API/scan/user/... anrufen, nichts auf meiner client erscheint.

emit('my response', {'data': 'Entered the room ' + message['room']}, room=room) 

wird korrekt angezeigt.

Antwort

4

Ich denke, dass Sie einen Namespace-Parameter zu Ihrer emit in den API-Aufruf liefern müssen, da Sie einen Namespace definiert haben.

socketio.emit('my response', {'data': json.dumps(my_info, ensure_ascii=False)}, room=room, namespace='/test')

Wenn Sie den Namespace nicht liefern können Sie den Standard einen verwenden.

+2

Korrekt. Wenn Sie auf ein vom Client gesendetes Ereignis antworten, wird der Namespace vom Client-Ereignis abgerufen. Wenn der Server der Initiator ist, ist dieser Kontext nicht vorhanden, daher müssen Sie den Namespace angeben. – Miguel