2

我正在构建一个基于 Web 的生产力应用程序,该应用程序必须处理适度的用户并发,并且我一直在探索各种选项来保持服务器和客户端之间的数据同步。应用程序数据在页面加载时被引导到 JavaScript,并且 websockets 用于将数据推送到服务器。

对于一些上下文,我目前正在使用 Node.JS 和 Socket.IO 创建一个持久的客户端-服务器网关,它充当 Django 后端的代理。

挑战在于,我希望使所有连接的客户端彼此保持同步,以便在一个客户端会话上对应用程序的任何更改都会立即反映在所有连接的客户端会话上。困难在于并非所有用户都必须被允许查看所有数据;有各种不同的用户级别,不同的用户可以拥有略有不同的数据集。

因此,当以某种方式更改对象并将更改提交到数据库时,我需要知道我可以安全地将数据推送到当前连接的用户中的哪些用户。

我一直在探索不同的解决方案,我觉得这似乎可以通过 pubsub 消息队列处理 - 使用 AMQP 之类的东西,但我正在努力弄清楚应用程序的结构。

在我看来,应用程序结构如下所示:

Client<--> Node.JS gateway<--> AMQP messaging queue<-->Django app

我是否应该只创建一个直接交换,将 Node.js 和 Django 实例视为单个客户端,然后以某种方式在 Node.js 中过滤结果?

或者这种过滤是消息系统可以处理的,例如,每个连接的客户端订阅一个相关的主题,并且只接收他们被允许查看的数据?

我几乎没有使用消息传递系统的经验,所以我很难弄清楚它们在应用程序中能够扮演什么样的角色。任何建议将不胜感激。

4

1 回答 1

0

我认为每个客户端订阅相关队列并将节点用作哑网关会容易得多。通常,将安全性尽可能地推到堆栈中是一个好主意。此外,我认为如果客户离线一段时间,处理会更容易,因为您可以将内容留在他们的队列中,稍后再将其推回。

于 2010-12-02T12:26:14.767 回答