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 |
浏览器兼容性
加载中…