WebTransport: createUnidirectionalStream() 方法
注意:此功能在 Web Workers 中可用。
WebTransport 介面的 createUnidirectionalStream() 方法會非同步開啟一個單向流。
該方法返回一個 Promise,該 Promise 解析為一個 WritableStream 物件,可用於向伺服器可靠地寫入資料。
“可靠”意味著保證資料的傳輸順序。這提供了比 datagrams 更慢的傳輸速度(儘管比 WebSockets 快),但在可靠性和順序性至關重要的情況下是必需的,例如聊天應用程式。
可以使用 sendOrder 選項指定已建立流中排隊的位元組被清空的相對順序。如果設定了 sendOrder,則具有較高 sendOrder 的流中的排隊位元組保證在具有較低 sendOrder 的流中的排隊位元組之前傳送。如果未設定順序號,則位元組的傳送順序取決於實現。但請注意,即使較高 sendOrder 的流中的位元組會先發送,它們也可能不會先到達。
語法
createUnidirectionalStream()
createUnidirectionalStream(options)
引數
options可選-
一個可能具有以下屬性的物件
sendOrder可選-
一個整數值,指定此流相對於已設定此值的其他流的傳送優先順序。具有較高值的流會首先發送排隊的位元組。如果未設定,則傳送順序取決於實現。
返回值
一個 Promise,該 Promise 解析為一個 WebTransportSendStream 物件(這是一個 WritableStream)。
異常
InvalidStateErrorDOMException-
如果在 WebTransport 關閉或失敗時呼叫
createUnidirectionalStream(),則會丟擲此異常。
示例
使用 createUnidirectionalStream() 方法獲取對 WritableStream 的引用。然後,您可以從中 獲取寫入器,以便將資料寫入流併發送到伺服器。
使用生成的 WritableStreamDefaultWriter 的 close() 方法來關閉關聯的 HTTP/3 連線。瀏覽器會嘗試在實際關閉關聯的連線之前傳送所有待處理的資料。
async function writeData() {
const stream = await transport.createUnidirectionalStream({
sendOrder: "596996858",
});
const writer = stream.getWriter();
const data1 = new Uint8Array([65, 66, 67]);
const data2 = new Uint8Array([68, 69, 70]);
writer.write(data1);
writer.write(data2);
try {
await writer.close();
console.log("All data has been sent.");
} catch (error) {
console.error(`An error occurred: ${error}`);
}
}
您還可以使用 WritableStreamDefaultWriter.abort() 來強制終止流。使用 abort() 時,瀏覽器可能會丟棄尚未傳送的任何待處理資料。
// …
const stream = await transport.createUnidirectionalStream();
const writer = stream.getWriter();
// …
writer.write(data1);
writer.write(data2);
await writer.abort();
// Not all the data may have been written.
規範
| 規範 |
|---|
| WebTransport # dom-webtransport-createunidirectionalstream |
瀏覽器相容性
載入中…