使用UID在flask-socketio上发射

时间:2019-10-20 00:02:27

标签: flask flask-socketio

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

编辑:是否有其他方法可以使SID保持不变?

1 个答案:

答案 0 :(得分: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,反之亦然。