flask socketio emit to specific user

I’m not sure I understand the logic behind emitting to the first client, but anyway, this is how to do it:

clients = []

@socketio.on('joined', namespace="/chat")
def joined(message):
    """Sent by clients when they enter a room.
    A status message is broadcast to all people in the room."""
    # Add client to client list
    clients.append(request.sid)

    room = session.get('room')
    join_room(room)

    # emit to the first client that joined the room
    emit('status', {'msg': session.get('name') + ' has entered the room.'}, room=clients[0])

As you can see, each client has a room for itself. The name of that room is the Socket.IO session id, which you can get as request.sid when you are handling an event from that client. So all you need to do is store this sid value for all your clients, and then use the desired one as room name in the emit call.

Leave a Comment