簡體   English   中英

使用Node.js實時:WebSocket +服務器端輪詢與客戶端端輪詢

[英]Real-Time with Node.js: WebSocket + Server-Side Polling vs. Client-Side Polling

我正在開發顯示來自Redis的實時數據(圖表等)的應用程序。 更新后的數據很快(毫秒)到達Redis。 因此,盡可能多地顯示更新是有意義的(只要人眼可以注意到它)。

技術棧:

  • Node.js作為Web服務器
  • Redis保存數據
  • JavaScript / HTML(AngularJS)作為客戶端

現在,我在客戶端進行輪詢(每秒向Redis查詢更新以獲取對Node.js服務器的請求)。

代替進行服務器端輪詢並通過WebSocket公開更新是否有優勢? 每個WebSocket連接都將需要單獨的Node.js輪詢(setInterval),因為客戶端查詢可能有所不同。 但預計WebSocket連接不會超過100個。

這兩種方法之間有什么利弊?

如果我正確理解了您的問題:您將同時使用資源的用戶少於100個,並且您想找出一種更好的方式向他們提供更新:

  • 客戶通過超時請求(每秒1個)請求更新
  • 服務器會跟蹤客戶端,並且只要有更新,就會向他們發出更新。

我認為最好的解決方案取決於您擁有的數據以及用戶獲取此數據的重要性。

如果出現以下情況,我會選擇客戶端:

  • 人們不在乎他們的數據是否過時
  • 在這1秒鍾內大約會有1次更新
  • 我沒有時間修改代碼

如果出現以下情況,我將使用服務器端:

  • 重要的是要擁有最新的數據,並且用戶不能容忍滯后
  • 更新不是那么頻繁(例如,如果我們每分鍾僅更新一次,則60個客戶端請求中只有1個有用。這里服務器只會發布一個更新)

一件好事是,node.js已經為此目的提供了一個出色的socket.io庫。

暫無
暫無

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

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