我正在node.js和MongoDB中开发社交网络类型的应用程序。
我想添加一个功能,例如-
如果用户A跟着用户B,那么当用户B发布内容时,它应该会自动来到用户A的墙上!
方法1-这是我到目前为止的研究
创建一个用户B的频道,其他所有用户都订阅该频道,并且当用户B发布内容时,然后在所有订阅者上使用socket.io发出该频道。
因此对于这种方法,我们正在考虑在每次新用户注册时创建一个渠道。
但是问题是-
这是一种可行的方法,因为我如何知道哪个频道是哪个用户或是否有一种方法可以将频道存储在MongoDB中。
如果我创建了太多通道,那会使服务器崩溃吗?
方法2-
我得到的另一种方法是
在数据库中查找源用户的关注者。
并使用socket.io向所有关注者发送提要
如果每个用户有100个关注者,并且每次用户发布帖子时,如何在数据库中进行搜索都会产生开销,那么如何扩展此功能。
使用Redis缓存会更好地存储关注者吗?
而不是检查关注者-
从Redis找到并使用socket.io发出味精
方法3-
我听说过Redis pub / sub的名称,但无法在我的应用程序中找到它的工作方式。
请提出一些创建这样的最佳标准!
如果以上方法都可以,那么您可以建议我这样做的流程,或者如何为它创建代码!
如果您提供一个例子,我将非常高兴。
最佳答案
我认为您可以使用Approach 2
,但是必须创建一个队列(redis队列或rabbitMQ)来执行此操作。
我的意思是,当您创建帖子时,它必须推送到队列才能将消息推送到数据库中的100个,1000个关注者。
关于node.js - 如何实时获取 Node 应用程序中的所有关注者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46871238/