WebTransport: createBidirectionalStream() 方法

有限可用性

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

安全上下文:此功能仅在 安全上下文 (HTTPS) 中可用,在一些或所有 支持的浏览器 中可用。

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

createBidirectionalStream() 方法是 WebTransport 接口的一种异步方法,它会打开并返回一个双向流。

该方法返回一个 Promise,它会解析为一个 WebTransportBidirectionalStream 对象,该对象具有 readablewritable 属性,可用于可靠地从服务器读取和写入数据。 "可靠" 意味着数据的传输和顺序是有保证的。与 datagrams 相比,这提供了更慢的传输速度(尽管比 WebSockets 快),但在需要可靠性和排序的情况下,例如聊天应用程序,这是必要的。

可以使用 sendOrder 选项指定从已创建流中清空排队字节的相对顺序。如果设置,则具有更高发送顺序的流中排队的字节保证在具有较低发送顺序的流的排队字节之前发送。如果没有设置顺序号,则发送字节的顺序取决于实现。但是,请注意,即使来自更高发送顺序流的字节先发送,它们也可能不会先到达。

语法

js
createBidirectionalStream()
createBidirectionalStream(options)

参数

options 可选

一个可能具有以下属性的对象

sendOrder 可选

一个整数值,指定此流相对于其他流的发送优先级,这些流已设置该值。具有更高值的流的排队字节将首先发送。如果未设置,则发送顺序取决于实现。

返回值

一个 Promise,它会解析为一个 WebTransportBidirectionalStream 对象。

异常

InvalidStateError DOMException

如果在 WebTransport 关闭或失败时调用 createBidirectionalStream(),则会抛出此异常。

示例

一个初始函数用于获取对 WebTransportBidirectionalStream.readableWebTransportBidirectionalStream.writable 属性的引用。这些是 WebTransportReceiveStreamWebTransportSendStream 实例的引用,它们是可读和可写的流,可用于从服务器读取和写入数据。

js
async function setUpBidirectional() {
  const stream = await transport.createBidirectionalStream({
    sendOrder: "596996858",
  });
  // stream is a WebTransportBidirectionalStream
  // stream.readable is a ReadableStream
  const readable = stream.readable;
  // stream.writable is a WritableStream
  const writable = stream.writable;

  // ...
}

然后可以像这样从 WebTransportReceiveStream 中读取数据

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
# dom-webtransport-createbidirectionalstream

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅