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: Diese Funktion ist in Web Workers verfügbar.

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 Schreibgeschützt

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

writable Schreibgeschützt

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

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
WebTransportBidirectionalStream
readable
Returns WebTransportReceiveStream (earlier spec returned WritableStream)
Experimental
writable
Returns WebTransportSendStream (earlier spec returned WritableStream)
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
User must explicitly enable this feature.

Siehe auch