AJAX 雖提升交互體驗,但受限於 HTTP 半雙工本質,實時資料推送需突破此限制。
| 技術 | 原理 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| HTTP Streaming | 單一長連接,Server 持續寫入資料流(或 XMLHttpRequest 持續接收) | 真正推送、低延遲、連接數少 | Proxy/防火牆易斷連、瀏覽器緩衝區處理差異大、Server 需支援非阻塞 IO | 股票報價、即時儀表板 |
| HTTP Polling (傳統輪詢) | 客戶端固定間隔發請求檢查更新 | 實作簡單、普遍相容 | 高頻→浪費頻寬/資源;低頻→錯過更新。理想間隔 = 狀態變更頻率(不可知) | 低頻非關鍵通知 |
| Reverse AJAX / Comet | 利用 HTTP/1.1 Keep-Alive 長連接,Server 有事件時主動回應,客戶端收到後重連 | 近乎實時、標準 HTTP、穿透 Proxy 機率高 | 佔用 Server 連接資源、需非阻塞 IO(NIO/Event-driven)、實作複雜 | 聊天室、協同編輯、即時通知 |
| Long Polling (異步輪詢) | 客戶端發請求→Server 無事件掛起→有事件/超時回應→客戶端處理後立即重連。基於 Bayeux 協定(發布/訂閱) | 兼容性最好(無特殊 Server 需求)、資源佔用可控、天然支援斷線重連 | 頻繁重連開銷、超時參數調優難 | Web 應用即時推送主流選擇(Socket.io 早期預設) |
WebSocket 已成主流標準,除非有強制限制,新專案應直接採用 WebSocket + 長連接心跳 + 自動重連機制,避免在半雙工 HTTP 上造輪子。