WebTransportBidirectionalStream

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Das WebTransportBidirectionalStream-Interface der WebTransport-API repräsentiert einen bidirektionalen Stream, der von einem Server oder einem Client erstellt wurde und für den zuverlässigen Transport verwendet werden kann. Es stellt Zugriff auf einen WebTransportReceiveStream zum Lesen eingehender Daten sowie einen WebTransportSendStream zum Schreiben ausgehender Daten bereit.

Instanz-Eigenschaften

readable Nur lesbar

Gibt eine Instanz von WebTransportReceiveStream zurück, die zum Lesen eingehender Daten verwendet werden kann.

writable Nur lesbar

Gibt eine Instanz von WebTransportSendStream zurück, die zum Schreiben ausgehender Daten verwendet werden kann.

Beispiele

Bidirektionale Übertragung initiiert durch den User-Agent

Um einen bidirektionalen Stream von einem User-Agent zu öffnen, verwenden Sie die Methode WebTransport.createBidirectionalStream(), um eine Referenz auf einen WebTransportBidirectionalStream zu erhalten. Die Eigenschaften readable und writable geben Referenzen zu WebTransportReceiveStream- und WebTransportSendStream-Instanzen zurück. Diese erben jeweils von ReadableStream und WritableStream und können verwendet werden, um vom Server zu lesen und darauf zu schreiben.

js
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;

  ...
}

Das Lesen aus dem WebTransportReceiveStream kann auf dieselbe Weise erfolgen wie das Lesen eines ReadableStream:

js
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);
  }
}

Und das Schreiben in den WebTransportSendStream kann so durchgeführt werden:

js
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);
}

Bidirektionale Übertragung initiiert durch den Server

Wenn der Server einen bidirektionalen Stream öffnet, um Daten an den Client zu senden und von diesem zu empfangen, kann über die Eigenschaft WebTransport.incomingBidirectionalStreams darauf zugegriffen werden, die einen ReadableStream von WebTransportBidirectionalStream-Objekten zurückgibt. Jeder davon kann, wie oben gezeigt, zum Lesen und Schreiben von Uint8Array-Instanzen verwendet werden. Jedoch benötigen Sie zunächst eine Funktion, um den bidirektionalen Stream zu lesen:

js
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);
  }
}

Spezifikationen

Specification
WebTransport
# webtransportbidirectionalstream

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch