使用UID在flask-socketio上发射

问题描述 投票:0回答:1

我正在尝试使用flask和flask_socketio创建Skype Web,我已经知道在发送以发送私人消息时必须使用room参数,但是到目前为止,我所看到的示例都使用了SID,如果用户重新启动页面,则更改。因此,我让每个登录的用户都有自己的ID,但我不知道如何使它在emit ('an_event', room = id)上运行。如何将会议室发送给我的自定义ID,而不是会话ID?

编辑:另一种方法,有什么方法可以使SID保持不变?

flask flask-socketio
1个回答
0
投票

Flask-SocketIO服务器不知道您的应用程序特定的用户ID。您需要做的是在分配给每个客户端连接的SID与每个客户端代表的用户ID之间创建映射。您可以通过添加连接和断开连接处理程序来实现。示例:

user_to_sid = {}
sid_to_user = {}

@socketio.on('connect')
def on_connect(environ):
    user_id = authenticate_user(environ)
    user_to_sid[user_id] = request.sid
    sid_to_user[request.sid] = user_id

@socketio.on('disconnect')
def on_disconnect():
    user_id = sid_to_user[request.sid]
    del user_to_sid[user_id]
    del sid_to_user[request.sid]

一旦有了映射,就可以轻松找到给定用户的当前SID,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.