【问题标题】:Use UID to emit on flask-socketio使用 UID 在 flask-socketio 上发射
【发布时间】:2019-10-21 06:23:35
【问题描述】:

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

编辑:另一种方式,有什么方法可以让 SID 不改变?

【问题讨论】:

    标签: flask flask-socketio


    【解决方案1】:

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

    【讨论】:

    • 但是刷新页面后,SID 发生了变化。如果我使用旧的 SID,它还能工作吗?
    • 哦,我想我明白你的推理了
    • 如果刷新页面,断开连接处理程序将删除旧的 sid,然后使用新的 sid 调用新的连接处理程序。所以字典会自动更新。
    猜你喜欢
    • 2019-07-11
    • 2023-03-12
    • 2016-12-11
    • 2018-06-18
    • 2020-04-05
    • 2019-03-16
    • 2018-08-21
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多