即時性傳輸技術

技術
單向 or 雙向
即時性
相容性(瀏覽器)
使用情境

Short Polling

單向

✅ 全面支援

簡單輪詢,不需即時

Long Polling

單向

✅ 全面支援

接近即時,低頻事件(如通知)

SSE

單向

✅ 除 IE 不支援

即時新聞/通知串流

WebSocket

雙向

非常高

✅ 全面支援

聊天、遊戲、協作編輯

HTTP/2 Push

單向

❗瀏覽器逐漸淘汰

預加載資源(非資料)


🧩 各技術逐個說明

1. 🔁 Short Polling(短輪詢)

  • 客戶端每隔幾秒主動發請求問伺服器「有沒有新資料?」。

  • 無論是否有資料,伺服器都會回應。

  • **缺點:**資源浪費、不是即時。

📌 用法場景:

setInterval(() => {
  fetch('/api/updates')
    .then(res => res.json())
    .then(data => console.log(data));
}, 5000);  // 每 5 秒請求一次

2. 🔄 Long Polling(長輪詢)

  • 客戶端送出請求後,伺服器會等「有資料」才回應(或等 timeout)。

  • 回應後客戶端馬上再送下一個請求。

📌 用法場景:即時通知,但無法用 WebSocket

function poll() {
  fetch('/api/notifications')
    .then(res => res.json())
    .then(data => {
      console.log(data);
      poll(); // 回來後再送出下一次
    });
}
poll();

3. 📢 Server-Sent Events (SSE)

  • 一種只允許「伺服器 ➡ 客戶端」的單向即時資料推送

  • 用 HTTP 協定的 text/event-stream

  • 保持連線,伺服器可隨時發訊息給客戶端。

📌 用法場景:天氣更新、即時價格

const eventSource = new EventSource('/api/stream');
eventSource.onmessage = (event) => {
  console.log('Received:', event.data);
};

4. 🔌 WebSocket(雙向即時通訊)

  • 建立持久連線,伺服器與客戶端可互相發送資料

  • 真正的雙向、即時溝通。

  • 需要支援 WebSocket 協定(ws:// or wss://)。

📌 用法場景:聊天室、多人協作、即時遊戲

const socket = new WebSocket('wss://example.com/chat');
socket.onmessage = (event) => {
  console.log('Server says:', event.data);
};
socket.send('Hello Server');

5. 🚀 HTTP/2 Server Push(已逐漸退場)

  • 不是真正「資料推送」機制,而是伺服器在你請求 HTML 時順便推送其它資源(如 CSS、JS)

  • 幫助「預加載」。

  • 目前瀏覽器和 Cloudflare 均不再推薦使用,正在逐步被淘汰。

📌 **適合場景:**初次載入時預推 JS/CSS,不適合做即時推送

✅ 總結:怎麼選?

你想做什麼?
推薦技術

即時聊天

WebSocket ✅✅✅

即時通知(低頻)

Long Polling 或 SSE

即時資料串流(如新聞)

SSE ✅

後端簡單、資料不常變

Short Polling

HTTP 資源加速(已過時)

HTTP/2 Push(不推薦)

Last updated