如何在 Node.js 服务器上的多个客户端之间同步数据
How to synchronize data between multiple clients on Node.js Server
下图是我正在创建的 Web 应用程序的基本表示。
应用程序的基本操作如下:
- 客户端向 node.js 服务器发送数据请求
- 服务器收到请求。
- 服务器从数据库中获取数据。
- 服务器将数据作为 JSON 字符串发送回客户端。
- 客户端接收数据将其存储为 JSON 对象并将其绑定到 table.
一切正常。以下情况最能说明我遇到的问题。
- 客户端 1 到 4 都完成了上述步骤(即都有 table 数据绑定到 JSON 对象)。
- 客户端 1 现在向服务器发送更新请求。
- 服务器收到请求。
- 服务器更新数据库。
- 服务器向客户端 1 发送响应,指示操作成功并更新绑定到 table 的对象 JSON。
- 问题 JSON 客户端 2 到 4 上显示的数据现在不再与数据库同步。
所以我的问题是如何使所有 4 个(或更多)客户端的 JSON 数据与 Node.js 服务器上的数据库实时同步?
简而言之,您需要的是在发生变化时通知客户。尝试寻找 websockets,网上有很多很好的教程。基本上,websocket 是服务器和客户端之间的通信通道。您应该做的是向客户端发送有关已更改内容的通知,然后每个客户端应确定是否必须更新某些内容(并请求信息) .
看看这个库:https://www.npmjs.com/package/websocket
我认为它是最好的之一(如果它不是最好的话),您甚至可以找到示例和演示。
如果您愿意采用全栈框架,Meteor 会做您需要的一切,让您的所有客户端视图与更改保持同步。
Meteor 是一个巨大的依赖项 - 它对你在堆栈的每一层的技术选择都有意见 - 所以它不会适合所有人,但如果你想要快速的结果,它很难被击败。
我认为在 2021 年做到这一点的最佳方式是使用服务器发送的事件。每次收到数据时,您的后端都可以向所有其他客户端发出服务器发送的事件。 SSE 基本上是下游单向事件,浏览器可以像监听 websocket 一样监听它们。
客户端只会在网络延迟方面不同步,这是不可避免的。
我认为 SSE 的唯一问题是它们的浏览器兼容性较低,因此会破坏 IE 11 支持。
下图是我正在创建的 Web 应用程序的基本表示。
应用程序的基本操作如下:
- 客户端向 node.js 服务器发送数据请求
- 服务器收到请求。
- 服务器从数据库中获取数据。
- 服务器将数据作为 JSON 字符串发送回客户端。
- 客户端接收数据将其存储为 JSON 对象并将其绑定到 table.
一切正常。以下情况最能说明我遇到的问题。
- 客户端 1 到 4 都完成了上述步骤(即都有 table 数据绑定到 JSON 对象)。
- 客户端 1 现在向服务器发送更新请求。
- 服务器收到请求。
- 服务器更新数据库。
- 服务器向客户端 1 发送响应,指示操作成功并更新绑定到 table 的对象 JSON。
- 问题 JSON 客户端 2 到 4 上显示的数据现在不再与数据库同步。
所以我的问题是如何使所有 4 个(或更多)客户端的 JSON 数据与 Node.js 服务器上的数据库实时同步?
简而言之,您需要的是在发生变化时通知客户。尝试寻找 websockets,网上有很多很好的教程。基本上,websocket 是服务器和客户端之间的通信通道。您应该做的是向客户端发送有关已更改内容的通知,然后每个客户端应确定是否必须更新某些内容(并请求信息) .
看看这个库:https://www.npmjs.com/package/websocket
我认为它是最好的之一(如果它不是最好的话),您甚至可以找到示例和演示。
如果您愿意采用全栈框架,Meteor 会做您需要的一切,让您的所有客户端视图与更改保持同步。
Meteor 是一个巨大的依赖项 - 它对你在堆栈的每一层的技术选择都有意见 - 所以它不会适合所有人,但如果你想要快速的结果,它很难被击败。
我认为在 2021 年做到这一点的最佳方式是使用服务器发送的事件。每次收到数据时,您的后端都可以向所有其他客户端发出服务器发送的事件。 SSE 基本上是下游单向事件,浏览器可以像监听 websocket 一样监听它们。
客户端只会在网络延迟方面不同步,这是不可避免的。
我认为 SSE 的唯一问题是它们的浏览器兼容性较低,因此会破坏 IE 11 支持。