烧瓶插座向特定用户发出

发布于 2021-01-29 17:23:53

我看到有关此主题的问题,但未概述特定代码。说我只想向第一个客户发出。

例如(在events.py中):

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([session.get('name'), request.namespace])
    room = session.get('room')
    join_room(room)
    emit('status', {'msg': session.get('name') + ' has entered the room.'}, room=room)
    #I want to do something like this, emit message to the first client
    clients[0].emit('status', {'msg': session.get('name') + ' has entered the room.'}, room=room)

如何正确完成?

谢谢

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我不确定我是否了解向第一个客户端发出消息的逻辑,但是无论如何,这是这样做的:

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

    如您所见,每个客户都有自己的空间。该房间的名称是Socket.IO会话ID,您可以request.sid在处理来自该客户端的事件时获得该ID
    。因此,您要做的就是sid为所有客户存储此值,然后在emit呼叫中使用所需的房间名称。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看