繁体   English   中英

节点js redis socket.io pubsub实时更新

[英]Node js redis socket.io pubsub realtime updates

嗨,我正在为我的学校项目建立一个“Twitter克隆”。

我想为实时更新实现发布订阅模式。

  • 用户可以“关注”其他用户
  • 当用户在线并且“关注者”发布新消息时,用户应该获得实时通知。

我使用Node.js,Socket.io,Redis和MySql作为数据库提供程序。 我应该使用消息队列吗?人们使用消息队列是什么?

感谢您的帮助和解答

更新

当你小的时候,问题不存在。 但是当你变得狂热时(向所有关注者转发消息将会很昂贵,并且你想使用MQ离线完成。像twitter一样,你将所有活动的推文存储在内存中。当发布推文时你放( 设置 )那个内存中的推文@key(独特)。你可以使用类似Twitter的雪花

接下来扇出过程发生了。 对于每个用户,您需要唯一键(tweet id)放在其列表中,以便他们可以从内存中检索推文。 当你的网站很小时我想你可以在没有消息队列的情况下做到这一点,但是当你需要从用户那里分发一条消息时,例如scoble有274,776个粉丝,而且推文很多,这可能会非常昂贵。

很多用户都处于脱机状态,因此这些推文不需要立即发送给用户。 您可以像这样设计系统,因为您需要将所有内容保存在内存中。 我认为这是有效实现这一目标的唯一方法。


你应该像twitter一样使用MQ。 他们甚至开源了他们自己的MQ: Kestrel 高可扩展性博客有一篇非常有趣的文章: 扩展Twitter:使Twitter的速度提高10000% 我建议你至少在High Scalability博客上学习热门文章 ,了解大型玩家如何扩展他们的网站。 其他一些链接解释了Twitter如何扩展

我还假设你读过:

我还要看看Twitter开源的所有项目:

我会看一下流行的MQ,例如:

我最近研究过一个类似的用例,我使用了nodejs,socketio和redis pubsub。

该代码可在https://github.com/roshansingh/realtime-notifications获得

现在回到你的问题:

  • 用户可以“关注”其他用户
  • 当用户在线并且“关注者”发布新消息时,用户应该获得实时通知。

您可以通过使用socketio创建房间和在redis pubsub中使用相同名称的频道来实现这两个目的。

流程可以是这样的:您可以在登录后立即让用户加入socketio房间(比如John,Dan等),您将把所有订阅的房间保存在数据库中。 同时您将使用这些频道名称(如John)订阅redis pubsub。 接收到的这些更新随后可以广播到房间,从而广播到所有在线用户。

您必须将John的活动在相同的频道名称(John)上发布到redis。

请阅读上面粘贴的链接上的代码。 如果您需要任何帮助,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM