【问题标题】:How to get real time feed to all the follower in node application如何在节点应用程序中实时获取所有关注者的信息
【发布时间】:2017-10-22 06:42:03
【问题描述】:

我正在 node.js 和 MongoDB 中开发社交网络类型的应用程序。 我想添加一个功能,例如 - 如果用户 A 关注了用户 B,那么当用户 B 发布内容时,它应该会自动出现在用户 A 的墙上!

方法 1- 这是我目前研究的 创建用户 B 的频道,所有其他用户订阅该频道,当用户 B 发布内容时,然后在所有订阅者上使用 socket.io 发出该频道。 因此对于这种方法,我们正在考虑在每次新用户注册时创建一个频道。

但问题是 - 这种可行的方法是我如何知道哪个频道是哪个用户,或者有没有办法将频道存储在 MongoDB 中。 如果我创建太多频道会导致我的服务器崩溃吗?

方法 2 -

我得到的另一种方法是

在您的数据库中查找源用户的关注者。 并使用 socket.io 向所有追随者发送提要 如果我每个用户有 100 个关注者,并且每次用户发布时,如何扩展这个,在数据库中搜索会产生开销。 使用 Redis 缓存来存储关注者会更好吗? 而不是检查追随者- 从 Redis 中找到它并使用 socket.io 发出 msg

方法 3 -

我听说过 Redis pub/sub 的名称,但无法找到它在我的应用程序中的工作方式。

请提出一些创建此类内容的最佳标准! 如果上述方法都很好,您能否建议我为此的流程或如何为此创建代码!

如果你能给我一个例子,我会很好。

【问题讨论】:

    标签: node.js mongoose socket.io publish-subscribe node-redis


    【解决方案1】:

    我认为您可以使用Approach 2,但您必须创建一个队列(redis 队列或 rabbitMQ)才能做到这一点。 我的意思是当你创建一个帖子时,它必须推送到队列以将消息推送到你的数据库中的 100、1000 个关注者。

    【讨论】:

    • 为了达到最佳效果,我是否将关注者存储在 redis 中?这样每次都不需要检查后端数据库??
    • 不需要,因为我们不需要立即向关注者发送消息,因此您可以在队列中运行作业来执行此操作。只需从数据库查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多