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 variable
room
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.
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