【问题标题】:How to build friend list where user status is shown online/offline?如何建立在线/离线显示用户状态的朋友列表?
【发布时间】:2019-04-01 03:29:43
【问题描述】:

我有 2 个想法。

想法 1:

使用 Redis 将当前在线的人放入集合中。然后从客户端用户会定期发送一个请求,向他发送他所有朋友的状态。服务器会发出 sql 请求来获取所有朋友并在 redis 集中找到他们,如果是,那么他们就在线。

想法 #2:

使用 Redis PubSub,当您作为用户在线时,您可以订阅所有 n 个好友频道。每当用户上网时,他就会在他或她在线的频道上发布。并且任何可能在听的人都会收到通知。

现在我不知道哪一个更具可扩展性和效率。

【问题讨论】:

    标签: node.js redis publish-subscribe


    【解决方案1】:

    我认为 idea #1 应该是解决方案。 idea #2 无法工作。

    Redis 不保留已发布的消息。因此,如果客户端未连接到 Redis,则消息将丢失。当他重新连接到 Redis 时,他不会收到之前发布的任何消息。

    在你的idea #2的例子中,当用户登录时,他不知道他的朋友是否已经在线。因为他的在线朋友在他登录之前已经发布了在线消息,他不会收到这些消息。

    【讨论】:

    • 定期池感觉好像我使用 websocket 的整个观点都被否定了。为什么客户必须一遍又一遍地问。当有人上线或下线时服务器可以简单地通知
    • @MuhammadUmer 为了实现这一点,您需要结合 idea #1idea #2。当用户登录时,他从一个 SET 中获取所有在线朋友,并订阅他所有朋友的频道。之后,他在这些频道上收听朋友的在线/离线消息。当客户端登录/注销时,他需要更新 SET 并发送消息通知他的朋友。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2014-03-17
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多