我正在尝试使用flask和flask_socketio创建Skype Web,我已经知道在发送发送私人消息时必须使用room
参数,但是到目前为止我看到的示例都使用了SID,如果用户重新启动页面,它将更改。因此,我使每个登录的用户都有自己的ID,但是我不知道如何使它在emit ('an_event', room = id)
上运行。如何将会议室发送给我的自定义ID,而不是会话ID?
编辑:是否有其他方法可以使SID保持不变?
答案 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,反之亦然。