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

浏览器兼容性

另见