使用 UID 在 flask-socketio 上发射

Use UID to emit on flask-socketio

我正在尝试使用 flask 和 flask_socketio 制作 Skype Web,我已经知道我必须在发送时使用 room 参数来发送私人消息,但是我的示例到目前为止,我们已经看到使用 SID,如果用户重新启动页面,它会发生变化。所以我让每个登录的用户都有自己的 ID,但我不知道如何让它在 emit ('an_event', room = id) 上工作。如何将房间发送到我的自定义 ID 而不是会话 ID?

编辑:换个方式,有什么办法可以让SID不改变吗?

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,反之亦然。