烧瓶 socketio 向特定用户发出 [英] flask socketio emit to specific user
问题描述
我看到有一个关于这个话题的问题,但没有概述具体的代码.假设我只想发送给第一个客户端.
I see there is a question about this topic, but the specific code is not outlined. Say I want to emit only to the first client.
例如(在 events.py 中):
For example (in 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)
这是如何正确完成的?
谢谢
推荐答案
我不确定我是否理解发送到第一个客户端背后的逻辑,但无论如何,这是如何做到的:
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])
如您所见,每个客户都有自己的房间.该房间的名称是 Socket.IO 会话 ID,当您处理来自该客户端的事件时,您可以将其作为 request.sid
获取.因此,您需要做的就是为所有客户端存储这个 sid
值,然后在 emit
调用中使用所需的值作为房间名称.
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.
这篇关于烧瓶 socketio 向特定用户发出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!