message-queue - 使用 AMQP 和 Node.JS 进行实时数据同步

标签 message-queue node.js real-time amqp

我正在构建一个基于 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/

相关文章:

node.js - 防止导入 es6 默认导出

node.js - NodeJS JWT Sign.sign 类型错误 : Not a buffer

c - 如何直接访问显示器进行绘图

java - Storm 拓扑事务和数据库事务

delphi - 覆盖 SetEnabled 与处理消息 CM_ENABLEDCHANGED

mysql - 通知数据库上的应用程序 INSERT

c# - 如何让 RabbitMQ 从队列中一个一个读取?

node.js - 由于证书错误,无法通过前端 Maven 插件安装 Node

c++ - CLOCK_THREAD_CPUTIME_ID 在 MacOS 上

C mqueue 不发送或接收整个消息