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

时间:2017-02-22 03:01:27

标签: javascript json node.js data-synchronization

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

Node.js Web Application Schematic

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

  1. 客户端从node.js服务器发送数据请求
  2. 服务器收到请求。
  3. 服务器从数据库中提取数据。
  4. 服务器将数据作为JSON字符串发送回客户端。
  5. 客户端接收数据将其存储为JSON对象并将其绑定到表。
  6. 一切正常。我遇到的问题最好用以下情况表示。

    1. 客户端1到4都完成上述步骤(即所有数据都绑定到JSON对象)。
    2. 客户端1现在向服务器发送更新请求。
    3. 服务器收到请求。
    4. 服务器更新数据库。
    5. 服务器向客户端1发送响应,指示操作成功并更新绑定到表的JSON对象。
    6. 问题客户端2到4上显示的JSON数据现在不再与数据库同步。
    7. 所以我的问题是如何将我的所有4个(或更多)客户端上的JSON数据与我的Node.js服务器上的数据库实时同步?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

如果您愿意接受全栈框架,Meteor会尽一切努力使您的所有客户端视图与更改保持同步。

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

答案 2 :(得分:0)

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

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

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