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

瀏覽器相容性

另見