管理Node Websockets主题 - 订户地图的最佳方法是什么?

时间:2016-05-24 15:33:47

标签: javascript node.js websocket redis

在服务于websockets的节点应用程序中,用户订阅了多个已发布的主题,并以实时方式获取有关主题的新更新,那么存储主题订阅者地图的最佳方式是什么?

直播主题:主题1,主题2,主题3,主题4

User1订阅Topic1,Topic2,Topic4。 User2订阅了Topic2,Topic4。

所以应该有一个地图对象如下

Topic1=>[User1]
Topic2=>[User1,User2]
Topic4=>[User1,User2]

因此,当Topic1有更新时,应用程序应在User1的websocket上传递更新。

问题:将主题订阅者地图保留为应用程序变量(javascript对象)是否足够好?或者使用REDIS来管理这个更好吗?

我还希望将信息存储在此地图中,以便按地理位置分析主题随时间变化的趋势。因此,此数据应在后台复制到原始数据库。

我相信每次有关主题的更新时,我都不应该查询数据库以查找当前订阅者。

与我设法找到的一样,REDIS是一个内存数据存储区。并且javascript应用程序变量也将存在于RAM中。

最好的方法是什么?

需要对订阅者进行最快速的更新。

1 个答案:

答案 0 :(得分:1)

我个人认为最好在Redis中执行此操作,但这只是因为您的应用程序扩展后,您迟早会需要多个节点。你这样做的那一刻,你就离开了NodeJS-land并试图找到一些方法来协调整个集群的这项工作。 Redis非常适合这项任务。

那也许你应该看看ActionHero框架。它的聊天模块正是您正在尝试做的事情。使用非常少的代码,您可以让WebSocket客户端连接到群集中的一个或多个节点(由Redis协调)并加入零个或多个聊天室,然后接收发送到这些会议室的消息。它可以节省你一些时间。