【问题标题】:Socket IO Default RoomsSocket IO 默认房间
【发布时间】:2018-05-01 02:03:29
【问题描述】:

我想在 Python 中使用 Web Socket 创建一个实时通知中心。 我有一个向特定用户发送/发出消息的功能。

我已阅读有关套接字 ID 和房间的信息。我认为有几种方法可以使用 Socket IO 中的这两个功能进行直接用户交互。

第一

在文档中说,每个连接到套接字服务器的客户端/套接字,他们都给出了一个唯一的套接字#id,并加入了一个由 id 标识的房间。 我有一个想法,我不需要再次为用户创建房间,只需使用此默认房间即可。

通过使用这些,我想创建一个 socket#id 与 userid(记录的用户 id)的映射,并将其存储到 redis 中。就像,如果我想向用户 id 发送消息,我只需要搜索它的 socket#id。

第一种方法的问题是,socket#id 是否相同 如果客户端断开连接并很快重新连接,则连接可以 成立?

第二:

我已经阅读了许多关于使用空间进行直接消息的资料。对于已连接的客户端或套接字,我只需要使用从客户端发送的用户 id 的 id 创建一个新房间(用户登录后)。

这种方式的优点是,如果用户在多个设备上使用相同的用户 ID,我可以将它们分组到一个房间中。所以,如果我想通知所有设备,我只需要为 id 用户的房间发送消息。

这种方式的问题是,用户将从默认房间移动 从第一种方式,否则他们将在 2 个房间(1 个默认房间,1 个指定房间 按用户 ID)?

谢谢

【问题讨论】:

    标签: socket.io flask-socketio


    【解决方案1】:

    我就是这样做的

    用户的socketid在每个页面请求上都会不同,如果用户打开了3个标签,他将在每个标签上都有不同的socketid,所以如果你希望用户在每个标签中都收到通知,你需要发送它到 3 个 socketids

    解决方案是创建一个已连接用户的对象,您可以在对象中添加用户 ID/用户名作为键,并为该用户创建一个包含所有套接字 ID 的数组,确保在用户断开连接时删除套接字 ID同样,当你想发送通知时,你只需遍历数组并发送给所有用户的 socketids

    【讨论】:

      【解决方案2】:

      第一种方法的问题是,如果客户端断开连接并很快重新连接可以建立连接,socket#id 是否相同?

      没有。每个连接都会获得一个随机分配的套接字 id。

      这种方式的问题是,用户将从第一种方式从默认房间移动还是他们将在 2 个房间(1 个默认房间,1 个由用户 ID 指定的房间)?

      用户可以同时在多个房间中。如果您使用应用程序生成的用户 ID 创建一个房间,然后将来自该用户的所有套接字连接放入该房间,则这些客户端中的每一个都将位于两个房间中,一个与套接字 ID 匹配,另一个与您的用户匹配ID。然后,您可以单独向每个套接字或属于该用户的所有套接字发出消息。

      【讨论】:

        猜你喜欢
        • 2017-08-28
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多