WebTransport:createBidirectionalStream() 方法
注意:此功能在 Web Workers 中可用。
createBidirectionalStream() 方法是 WebTransport 接口的一部分,它会异步打开并返回一个双向流。
该方法返回一个 Promise,该 Promise 解析为一个 WebTransportBidirectionalStream 对象,该对象具有 readable 和 writable 属性,可用于可靠地从服务器读取和写入数据。“可靠”意味着数据的传输和顺序都得到保证。这提供了比 数据报 更慢的传输速度(尽管比 WebSockets 快),但在可靠性和顺序很重要的场景(如聊天应用程序)中是必需的。
可以使用 sendOrder 选项指定已创建流中排队字节被清空相对顺序。如果设置了此选项,则保证具有较高发送顺序的流中的排队字节会先于具有较低发送顺序的流中的排队字节发送。如果未设置顺序号,则发送字节的顺序取决于具体实现。但请注意,即使来自较高发送顺序流的字节会先发送,它们也可能不会先到达。
语法
createBidirectionalStream()
createBidirectionalStream(options)
参数
options可选-
一个可能具有以下属性的对象
sendOrder可选-
一个整数值,指定此流相对于已设置该值的其他流的发送优先级。排队字节会首先为具有较高值的流发送。如果未设置,发送顺序取决于具体实现。
返回值
一个 Promise,该 Promise 解析为一个 WebTransportBidirectionalStream 对象。
异常
InvalidStateErrorDOMException-
如果在
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 |
浏览器兼容性
加载中…