我正在构建一个基于 Web 的生产力应用程序,该应用程序必须处理适度的用户并发性,并且我一直在探索各种选项来保持服务器和客户端之间的数据同步。应用程序数据在页面加载时引导至 JavaScript,并使用 Websocket 将数据推送到服务器。
为了了解一些上下文,我目前正在使用 Node.JS 和 Socket.IO 创建一个持久的客户端-服务器网关,它充当 Django 后端的代理。
挑战在于,我希望使所有连接的客户端保持彼此同步,以便对一个客户端 session 上的应用程序进行的任何更改都会立即反射(reflect)在所有连接的客户端 session 上。困难在于,并非所有用户都必须被允许查看所有数据;有各种不同的用户级别,不同的用户可以拥有略有不同的数据集。
因此,当以某种方式更改对象并将更改提交到数据库时,我需要知道当前连接的哪些用户可以安全地将数据推送到哪些用户。
我一直在探索不同的解决方案,我觉得这似乎可以通过 pubsub 消息队列来处理 - 使用 AMQP 之类的东西,但我正在努力弄清楚应用程序的结构。
在我看来,应用程序结构如下所示:
客户端
<--> Node.JS网关
<--> AMQP消息队列
<--> Django应用程序
我是否应该创建一个直接交换,将 Node.js 和 Django 实例视为单个客户端,然后在 Node.js 中以某种方式过滤结果?
或者这种过滤是消息传递系统可以处理的,例如,每个连接的客户端订阅相关主题,并且只接收允许他们查看的数据?
我在消息系统方面的工作经验很少,因此我很难理解它们在应用程序中能够扮演什么样的角色。任何建议将不胜感激。
最佳答案
我认为每个客户端订阅相关队列并使用 Node 作为哑网关会更容易。一般来说,将安全性尽可能地向下推是一个好主意。另外,我认为如果客户端离线一段时间,处理会更容易,因为您可以将内容留在他们的队列中,稍后再将其推回。
关于message-queue - 使用 AMQP 和 Node.JS 进行实时数据同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4199290/