簡體   English   中英

如何在 Node.js 服務器上的多個客戶端之間同步數據

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

下圖是我正在創建的 Web 應用程序的基本表示。

Node.js Web 應用程序示意圖

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

  1. 客戶端從 node.js 服務器發送數據請求
  2. 服務器收到請求。
  3. 服務器從數據庫中獲取數據。
  4. 服務器將數據作為 JSON 字符串發送回客戶端。
  5. 客戶端接收數據將其存儲為 JSON 對象並將其綁定到表。

這一切正常。 我遇到的問題最好由以下情況表示。

  1. 客戶端 1 到 4 都完成了上述步驟(即都有一個綁定到 JSON 對象的數據表)。
  2. 客戶端 1 現在向服務器發送更新請求。
  3. 服務器收到請求。
  4. 服務器更新數據庫。
  5. 服務器向客戶端 1 發送響應,指示操作成功並更新綁定到表的 JSON 對象。
  6. 客戶端 2 到 4 上顯示的問題JSON 數據現在不再與數據庫同步。

所以我的問題是如何將所有 4 個(或更多)客戶端上的 JSON 數據與 Node.js 服務器上的數據庫保持實時同步?

簡而言之,您需要的是在發生變化時通知客戶。 嘗試尋找 websockets,網上有很多很好的教程。 基本上,websocket 是服務器和客戶端之間的通信通道。你應該做的是向客戶端發送關於發生了什么變化的通知,然后每個客戶端應該確定它是否必須更新某些內容(並請求信息) .

看看這個庫: https : //www.npmjs.com/package/websocket

我認為它是最好的之一(如果它不是最好的),您甚至會找到示例和演示。

如果您願意采用全棧框架, Meteor 會做您需要的一切,使您的所有客戶端視圖與更改保持同步。

Meteor 是一個巨大的依賴——它對你堆棧中每一層的技術選擇都有意見——所以它並不適合所有人,但如果你想要快速的結果,它很難被擊敗。

我認為在 2021 年做到這一點的最佳方法是使用服務器發送的事件。 您的后端每次接收數據時都可以向所有其他客戶端發出服務器發送的事件。 SSE 基本上是下游單向事件,瀏覽器可以像偵聽 websocket 一樣偵聽它們。

客戶端只會在網絡延遲方面不同步,這是不可避免的。

我認為 SSE 的唯一問題是它們的瀏覽器兼容性較低,因此會破壞 IE 11 支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM