WebTransport

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

WebTransport 介面是 WebTransport API 的一部分,它提供了使用者代理連線到 HTTP/3 伺服器、在任一方向或雙向發起可靠和不可靠傳輸,並在不再需要連線時關閉連線的功能。

建構函式

WebTransport()

建立一個新的 WebTransport 物件例項。

例項屬性

closed 只讀

返回一個在傳輸關閉時解析的 Promise。

datagrams 只讀

返回一個可用於傳送和接收資料報的 WebTransportDatagramDuplexStream 例項。

congestionControl 只讀 實驗性

返回一個字串,指示應用程式在傳送資料時偏好高吞吐量或低延遲。

incomingBidirectionalStreams 只讀

表示伺服器開啟的一個或多個雙向流。返回一個 WebTransportBidirectionalStream 物件的 ReadableStream。每個物件都可用於從伺服器讀取資料並將其寫回伺服器。

incomingUnidirectionalStreams 只讀

表示伺服器開啟的一個或多個單向流。返回一個 WebTransportReceiveStream 物件的 ReadableStream。每個物件都可用於從伺服器讀取資料。

ready 只讀

返回一個在傳輸準備好使用時解析的 Promise。

reliability 只讀 實驗性

返回一個字串,指示連線是否僅支援可靠傳輸,或者是否也支援不可靠傳輸(如 UDP)。

例項方法

close()

關閉正在進行的 WebTransport 會話。

createBidirectionalStream()

非同步開啟一個雙向流(WebTransportBidirectionalStream),可用於與伺服器讀寫。

createUnidirectionalStream()

非同步開啟一個單向流(WritableStream),可用於向伺服器寫入資料。

getStats() 實驗性

非同步返回一個 Promise,該 Promise 會解析為一個包含 HTTP/3 連線統計資訊的物件。

示例

下面的示例程式碼顯示瞭如何透過將 HTTP/3 伺服器的 URL 傳遞給 WebTransport() 建構函式來連線到該伺服器。請注意,方案必須是 HTTPS,並且必須顯式指定埠號。一旦 WebTransport.ready Promise 解析,您就可以開始使用連線了。

js
async function initTransport(url) {
  // Initialize transport connection
  const transport = new WebTransport(url);

  // The connection can be used once ready fulfills
  await transport.ready;
  return transport;
}

您可以透過等待 WebTransport.closed Promise 解析來響應連線關閉。WebTransport 操作返回的錯誤是 WebTransportError 型別,並且在標準的 DOMException 集之上包含附加資料。

下面的 closeTransport() 方法展示了一種可能的實現。在 try...catch 塊中,它使用 await 等待 closed Promise 解析或拒絕,然後報告連線是故意關閉還是由於錯誤關閉。

js
async function closeTransport(transport) {
  // Respond to connection closing
  try {
    await transport.closed;
    console.log(`The HTTP/3 connection to ${url} closed gracefully.`);
  } catch (error) {
    console.error(`The HTTP/3 connection to ${url} closed due to ${error}.`);
  }
}

我們可以將上述非同步函式呼叫放在它們自己的非同步函式中,如下所示。

js
// Use the transport
async function useTransport(url) {
  const transport = await initTransport(url);

  // Use the transport object to send and receive data
  // …

  // When done, close the transport
  await closeTransport(transport);
}

const url = "https://example.com:4999/wt";
useTransport(url);

有關其他示例程式碼,請參閱各個屬性和方法頁面。

規範

規範
WebTransport
# web-transport

瀏覽器相容性

另見