烧瓶 socketio 向特定用户发出 [英] flask socketio emit to specific user

查看:44
本文介绍了烧瓶 socketio 向特定用户发出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看到有一个关于这个话题的问题,但没有概述具体的代码.假设我只想发送给第一个客户端.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆