WebTransportBidirectionalStream

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

WebTransportBidirectionalStream 接口是 WebTransport API 的一部分,它代表由服务器或客户端创建的双向流,可用于可靠传输。它提供了对 WebTransportReceiveStream 的访问,用于读取传入数据,以及对 WebTransportSendStream 的访问,用于写入传出数据。

实例属性

readable 只读

返回一个 WebTransportReceiveStream 实例,可用于读取传入数据。

writable 只读

返回一个 WebTransportSendStream 实例,可用于写入传出数据。

示例

用户代理发起的双向传输

要从用户代理打开双向流,您可以使用 WebTransport.createBidirectionalStream() 方法获取 WebTransportBidirectionalStream 的引用。readablewritable 属性分别返回 WebTransportReceiveStreamWebTransportSendStream 实例的引用。它们分别继承自 ReadableStreamWritableStream,可用于与服务器进行读取和写入。

js
async function setUpBidirectional() {
  const stream = await transport.createBidirectionalStream();
  // stream is a WebTransportBidirectionalStream
  // stream.readable is a WebTransportReceiveStream
  const readable = stream.readable;
  // stream.writable is a WebTransportSendStream
  const writable = stream.writable;

  // …
}

WebTransportReceiveStream 读取数据的方式与读取 ReadableStream 的方式相同。

js
async function readData(readable) {
  const reader = readable.getReader();
  while (true) {
    const { value, done } = await reader.read();
    if (done) {
      break;
    }
    // value is a Uint8Array.
    console.log(value);
  }
}

WebTransportSendStream 写入数据可以按如下方式完成:

js
async function writeData(writable) {
  const writer = writable.getWriter();
  const data1 = new Uint8Array([65, 66, 67]);
  const data2 = new Uint8Array([68, 69, 70]);
  writer.write(data1);
  writer.write(data2);
}

服务器发起的双向传输

如果服务器打开双向流以向客户端传输数据并从中接收数据,则可以通过 WebTransport.incomingBidirectionalStreams 属性进行访问,该属性返回一个 WebTransportBidirectionalStream 对象的可读流 (ReadableStream)。每个流都可以按上述方式用于读取和写入 Uint8Array 实例。但是,您需要一个初始函数来首先读取双向流。

js
async function receiveBidirectional() {
  const bds = transport.incomingBidirectionalStreams;
  const reader = bds.getReader();
  while (true) {
    const { done, value } = await reader.read();
    if (done) {
      break;
    }
    // value is an instance of WebTransportBidirectionalStream
    await readData(value.readable);
    await writeData(value.writable);
  }
}

规范

规范
WebTransport
# webtransportbidirectionalstream

浏览器兼容性

另见