2015-07-03 39 views
7

Potrzebuję, aby dołączyć client do przyłączenia się do room, dzięki czemu może wtedy wiadomości z mojego server.Kolba SocketIO wysyła wiadomość z serwera do pokoju

Code Server

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

kod klienta

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

Jak tylko webpage ładunki, wchodzę "venue_1" do webpage form pt "join".

Strona variableroom po stronie server jest również ustawiona na "venue_1".

Problem polega na tym, że po wywołaniu API/scan/user/... nic nie pojawia się na moim client. Jednak

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

wyświetla się poprawnie.

Odpowiedz

4

Myślę, że musisz podać parametr namespace do emitowania w wywołaniu API, ponieważ zdefiniowałeś przestrzeń nazw.

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

Jeśli nie dostarczy nazw można użyć domyślny.

+2

Prawidłowe. Podczas odpowiadania na zdarzenie wysłane przez klienta przestrzeń nazw jest uzyskiwana ze zdarzenia klienta. Gdy serwer jest inicjatorem, ten kontekst nie istnieje, więc musisz podać przestrzeń nazw. – Miguel

Powiązane problemy