即時更新:Long-Polling / WebSocket / SSE

★★★★Draft

FromGrokking the System Design Interview

📚 From the Books

即時更新:Long-Polling / WebSocket / SSEConceptCommunication

標準 HTTP 是「用戶端問、伺服器答」——資料一在伺服器上更新,用戶端卻不知道。想讓更新即時抵達,就得在這條單向的問答上動手腳:讓用戶端一直問、讓伺服器把答覆吊著、或乾脆開一條能主動推的通道。四種做法,就是這條光譜上的四個點。

🧠 Core Ideas

TIP

一般 HTTP 的流程只有三步:用戶端開連線請求資料 → 伺服器算出回應 → 送回用戶端。所有即時更新技術,都是在回答同一個問題——伺服器有新資料時,怎麼讓用戶端知道

⚖️ Tradeoffs

Ajax Polling — 最直覺,但大量空回應
  • 大多數 AJAX 應用的標準做法:網頁定期發請求,伺服器照一般 HTTP 流量算好回應送回,用戶端重複這個循環拿到更新。
  • 痛點:用戶端得不斷問「有沒有新資料」,多數回應是空的,白白製造 HTTP 開銷。
HTTP Long-Polling — 把請求吊著等資料
  • 用戶端請求方式與一般輪詢相同,但預期伺服器不會立即回應
  • 沒資料時伺服器不送空回應,而是保持請求、等到資料出現(或逾時)才送出完整回應。
  • 用戶端收到回應後立即再發一個 Long-Poll 請求,讓伺服器幾乎總有一個等待中的請求可用來遞送資料。
  • 每個 Long-Poll 請求都有逾時限制,連線關閉後用戶端需要定期重新連線。
WebSocket — 一條連線,雙向隨時推
  • 用戶端透過 WebSocket Handshake 建立連線,成功後雙方可隨時雙向傳輸
  • 單一 TCP 上的持久連線,相比傳統 HTTP 通訊開銷更低,有利即時資料傳輸。
  • 伺服器可主動推內容到瀏覽器,不必等用戶端請求;訊息在連線保持的狀態下來回傳遞,形成雙向持續對話。
Server-Sent Events — 伺服器單向串流
  • 用戶端與伺服器建立一個持久且長期的連線,伺服器透過它把資料推給用戶端。
  • 只解決伺服器 → 用戶端這個方向;用戶端若要送資料回伺服器,得改用其他技術或協定。
  • 最適合需要即時單向資料流、或伺服器在迴圈中產生資料要連續發多個事件的場景。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading