如何在 Node.js 服务器上的多个客户端之间同步数据

How to synchronize data between multiple clients on Node.js Server

下图是我正在创建的 Web 应用程序的基本表示。

应用程序的基本操作如下:

  1. 客户端向 node.js 服务器发送数据请求
  2. 服务器收到请求。
  3. 服务器从数据库中获取数据。
  4. 服务器将数据作为 JSON 字符串发送回客户端。
  5. 客户端接收数据将其存储为 JSON 对象并将其绑定到 table.

一切正常。以下情况最能说明我遇到的问题。

  1. 客户端 1 到 4 都完成了上述步骤(即都有 table 数据绑定到 JSON 对象)。
  2. 客户端 1 现在向服务器发送更新请求。
  3. 服务器收到请求。
  4. 服务器更新数据库。
  5. 服务器向客户端 1 发送响应,指示操作成功并更新绑定到 table 的对象 JSON。
  6. 问题 JSON 客户端 2 到 4 上显示的数据现在不再与数据库同步。

所以我的问题是如何使所有 4 个(或更多)客户端的 JSON 数据与 Node.js 服务器上的数据库实时同步?

简而言之,您需要的是在发生变化时通知客户。尝试寻找 websockets,网上有很多很好的教程。基本上,websocket 是服务器和客户端之间的通信通道。您应该做的是向客户端发送有关已更改内容的通知,然后每个客户端应确定是否必须更新某些内容(并请求信息) .

看看这个库:https://www.npmjs.com/package/websocket

我认为它是最好的之一(如果它不是最好的话),您甚至可以找到示例和演示。

如果您愿意采用全栈框架,Meteor 会做您需要的一切,让您的所有客户端视图与更改保持同步。

Meteor 是一个巨大的依赖项 - 它对你在堆栈的每一层的技术选择都有意见 - 所以它不会适合所有人,但如果你想要快速的结果,它很难被击败。

我认为在 2021 年做到这一点的最佳方式是使用服务器发送的事件。每次收到数据时,您的后端都可以向所有其他客户端发出服务器发送的事件。 SSE 基本上是下游单向事件,浏览器可以像监听 websocket 一样监听它们。

客户端只会在网络延迟方面不同步,这是不可避免的。

我认为 SSE 的唯一问题是它们的浏览器兼容性较低,因此会破坏 IE 11 支持。