WebTransportBidirectionalStream
注意:此功能在 Web Workers 中可用。
WebTransportBidirectionalStream 接口是 WebTransport API 的一部分,它代表由服务器或客户端创建的双向流,可用于可靠传输。它提供了对 WebTransportReceiveStream 的访问,用于读取传入数据,以及对 WebTransportSendStream 的访问,用于写入传出数据。
实例属性
readable只读-
返回一个
WebTransportReceiveStream实例,可用于读取传入数据。 writable只读-
返回一个
WebTransportSendStream实例,可用于写入传出数据。
示例
用户代理发起的双向传输
要从用户代理打开双向流,您可以使用 WebTransport.createBidirectionalStream() 方法获取 WebTransportBidirectionalStream 的引用。readable 和 writable 属性分别返回 WebTransportReceiveStream 和 WebTransportSendStream 实例的引用。它们分别继承自 ReadableStream 和 WritableStream,可用于与服务器进行读取和写入。
async function setUpBidirectional() {
const stream = await transport.createBidirectionalStream();
// stream is a WebTransportBidirectionalStream
// stream.readable is a WebTransportReceiveStream
const readable = stream.readable;
// stream.writable is a WebTransportSendStream
const writable = stream.writable;
// …
}
从 WebTransportReceiveStream 读取数据的方式与读取 ReadableStream 的方式相同。
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.incomingBidirectionalStreams 属性进行访问,该属性返回一个 WebTransportBidirectionalStream 对象的可读流 (ReadableStream)。每个流都可以按上述方式用于读取和写入 Uint8Array 实例。但是,您需要一个初始函数来首先读取双向流。
async function receiveBidirectional() {
const bds = transport.incomingBidirectionalStreams;
const reader = bds.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
// value is an instance of WebTransportBidirectionalStream
await readData(value.readable);
await writeData(value.writable);
}
}
规范
| 规范 |
|---|
| WebTransport # webtransportbidirectionalstream |
浏览器兼容性
加载中…