跳至主要內容
Skip to content

Datagrams vs Streams:不可靠傳輸的威力

在 WebTransport 的世界裡,你不再被強制要求「每一份數據都必須安全抵達」。你可以根據業務需求,彈性選擇最適合的傳輸模式。


一、 Datagrams:速度至上,不問生死

Datagrams 是 WebTransport 最具備「UDP 特性」的部分。

特性:

  • 不可靠 (Unreliable):不保證數據一定會到達。
  • 無序 (Unordered):發送 A, B, C,接收端可能收到 C, A, B。
  • 無阻塞:消除了隊頭阻塞,丟包不會卡住後續數據。

適合場景:

  • 游標座標同步:舊的點不重要,我們只需要最新的位置。
  • 語音/視訊原始數據:偶爾的雜訊比延遲更好。

二、 Streams:可靠有序的優雅

Streams 提供了類似 TCP 的可靠保障,但其優勢在於多流並行。連線內可以有無數個流,流 A 的重傳不會卡住流 B。


三、 實戰:Datagrams Ping-Pong 實作

javascript
async function startPingPong(transport) {
  const writer = transport.datagrams.writable.getWriter();
  const reader = transport.datagrams.readable.getReader();

  setInterval(async () => {
    const startTime = performance.now();
    const data = new TextEncoder().encode(JSON.stringify({ time: startTime }));
    await writer.write(data);
  }, 1000);

  while (true) {
    const { value, done } = await reader.read();
    if (done) break;
    const pongData = JSON.parse(new TextDecoder().decode(value));
    console.log(`往返時間 (RTT): ${(performance.now() - pongData.time).toFixed(2)}ms`); 
  }
}

總結

Datagrams 追求極限延遲,而 Streams 確保數據完整。WebTransport 讓你能在同一個連線中完美平衡這兩者。

下一章,我們將探討如何靈活地管理單向與雙向流。


️ 進階挑戰

修改 Ping-Pong 範例,在發送時包裝一個序號 (Sequence Number),並在接收端統計有多少包「跳號」或「丟失」。


延伸閱讀與資源

← 上一章:WebTransport 揭秘 | 返回專題首頁 | 下一章:多流管理