WebTransport: createBidirectionalStream() 方法
注意:此功能在 Web Workers 中可用。
createBidirectionalStream()
方法是 WebTransport
接口的一种异步方法,它会打开并返回一个双向流。
该方法返回一个 Promise
,它会解析为一个 WebTransportBidirectionalStream
对象,该对象具有 readable
和 writable
属性,可用于可靠地从服务器读取和写入数据。 "可靠" 意味着数据的传输和顺序是有保证的。与 datagrams
相比,这提供了更慢的传输速度(尽管比 WebSockets 快),但在需要可靠性和排序的情况下,例如聊天应用程序,这是必要的。
可以使用 sendOrder
选项指定从已创建流中清空排队字节的相对顺序。如果设置,则具有更高发送顺序的流中排队的字节保证在具有较低发送顺序的流的排队字节之前发送。如果没有设置顺序号,则发送字节的顺序取决于实现。但是,请注意,即使来自更高发送顺序流的字节先发送,它们也可能不会先到达。
语法
createBidirectionalStream()
createBidirectionalStream(options)
参数
返回值
一个 Promise
,它会解析为一个 WebTransportBidirectionalStream
对象。
异常
InvalidStateError
DOMException
-
如果在
WebTransport
关闭或失败时调用createBidirectionalStream()
,则会抛出此异常。
示例
一个初始函数用于获取对 WebTransportBidirectionalStream.readable
和 WebTransportBidirectionalStream.writable
属性的引用。这些是 WebTransportReceiveStream
和 WebTransportSendStream
实例的引用,它们是可读和可写的流,可用于从服务器读取和写入数据。
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
中读取数据
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
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 的浏览器中加载。