2015-07-03 12 views
7

Nel mio app, ho bisogno del client a partecipare a una room in modo che possa poi receive messaggi dal mio server.Flask SocketIO inviare un messaggio dal server al stanza

Server Codice

@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) 

Codice Cliente

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

Non appena i webpage carichi, io entro "venue_1" nella webpage form intitolato "join".

Il variableroom sul lato server è impostato anche su "venue_1".

Il problema è che quando chiamo il API/scan/user/..., non viene visualizzato nulla sul mio client. Tuttavia,

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

appare correttamente.

risposta

4

Penso che sia necessario fornire un parametro namespace all'emissione nella chiamata API, poiché è stato definito uno spazio dei nomi.

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

Se non si fornisce lo spazio dei nomi che si intende utilizzare quella di default.

+2

Corretto. Quando si risponde a un evento inviato dal client, lo spazio dei nomi viene ottenuto dall'evento client. Quando il server è l'iniziatore, quel contesto non esiste, quindi devi fornire lo spazio dei nomi. – Miguel

Problemi correlati