WebTransport:createBidirectionalStream() 方法

可用性有限

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

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

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

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

该方法返回一个 Promise,该 Promise 解析为一个 WebTransportBidirectionalStream 对象,该对象具有 readablewritable 属性,可用于可靠地从服务器读取和写入数据。“可靠”意味着数据的传输和顺序都得到保证。这提供了比 数据报 更慢的传输速度(尽管比 WebSockets 快),但在可靠性和顺序很重要的场景(如聊天应用程序)中是必需的。

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

语法

js
createBidirectionalStream()
createBidirectionalStream(options)

参数

options 可选

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

sendOrder 可选

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

返回值

一个 Promise,该 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

浏览器兼容性

另见