WebTransportDatagramDuplexStream: createWritable() Methode
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.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die createWritable()-Methode des WebTransportDatagramDuplexStream-Interfaces gibt eine WebTransportDatagramsWritable-Instanz zurück, die zum Schreiben ausgehender Datagramme zum Transport verwendet werden kann.
Sie sollte anstelle der veralteten writable-Eigenschaft verwendet werden, wo sie unterstützt wird.
Syntax
createWritable()
createWritable(options)
Parameter
optionsOptional-
Ein Objekt, das die folgenden Eigenschaften haben kann:
sendGroupOptional-
Ein
WebTransportSendGroup, unter dem die Datagramme des zurückgegebenen Streams zur Zwecke dersendOrder-Priorisierung gruppiert werden sollen, odernull, wenn sie Teil der Standardgruppe sein sollen. Der Standardwert istnull. sendOrderOptional-
Ein ganzzahliger Wert, der die Sendepriorität der Datagramme des zurückgegebenen Streams angibt. Innerhalb der
sendGroupdes Streams werden die Bytes auf Streams mit höherer Priorität und Datagramme vor denen mit niedrigerer Priorität gesendet. Der Standardwert ist0.
Rückgabewert
Ein WebTransportDatagramsWritable-Objekt, welches WritableStream erweitert.
Ausnahmen
InvalidStateErrorDOMException-
Wird ausgelöst, wenn der Status des Transports
"closed"oder"failed"ist, oder wennsendGroupangegeben ist (nicht null) und mit einem anderenWebTransportassoziiert ist.
Beschreibung
Die createWritable()-Methode wird verwendet, um eine WebTransportDatagramsWritable-Instanz zum Schreiben ausgehender Datagramme zu erstellen.
Die Methode erlaubt es Ihnen, eine sendGroup anzugeben, die die Gruppe von Streams und Datagrammen definiert, zu der dieser Stream gehört, und eine sendOrder, die die relative Priorität dieses Streams innerhalb dieser Gruppe festlegt. Innerhalb einer Gruppe werden die Bytes, die auf Streams mit höherer Priorität und Datagrammen warten, vor den Bytes von niedrigeren gesendet. Verschiedene Gruppen sollten als gleichwertig für die Zwecke der Bandbreitenzuteilung behandelt werden — obwohl die genaue Art und Weise der Bandbreitenverteilung zwischen Gruppen implementierungsabhängig ist.
Die Übertragung ist unzuverlässig, was bedeutet, dass auch wenn Sie die Prioritätenfolge definieren können, es keine Garantie dafür gibt, dass jedes Datagramm gesendet wird oder dass sie in einer bestimmten Reihenfolge ankommen.
Beispiele
>Grundlegende Verwendung
Dieser Code zeigt, wie Sie die createWritable()-Methode verwenden können, um ein WebTransportDatagramsWritable zu erhalten und es zum Senden von Daten zu nutzen.
Zuerst definieren wir eine Funktion, um unseren Stream-Erstellungscode zu kapseln. Diese konstruierst zuerst einen WebTransport und verwendet diesen mit createWritable(), um einen schreibbaren Stream zu erstellen. Beachten Sie, dass, weil createWritable() nicht in allen Browsern unterstützt wird, der Code auf die writable-Eigenschaft zurückfällt, um den schreibbaren zu erstellen.
getWriter() wird dann auf writable aufgerufen, um einen Schreiber zu erstellen. Da Datagrammlieferung unzuverlässig ist, werden ausgehende Datagramme, die nicht rechtzeitig gesendet werden, verworfen. Aus diesem Grund wartet der Code auf das ready-Versprechen des Schreibers, bevor jedes Schreiben durchgeführt wird, sodass Datagramme nur geschrieben werden, wenn der zugrunde liegende Transport bereit ist, sie zu senden. Es werden auch alle Fehler von write() abgefangen, da eine Ablehnung bedeutet, dass ein bestimmtes Datagramm nicht gesendet wurde.
async function sendDatagrams(url, datagrams, writableOptions = {}) {
const wt = new WebTransport(url);
await wt.ready;
const writable =
typeof wt.datagrams.createWritable === "function"
? wt.datagrams.createWritable(writableOptions)
: wt.datagrams.writable;
const writer = writable.getWriter();
for (const bytes of datagrams) {
await writer.ready;
writer.write(bytes).catch(() => {});
}
}
Dieser Code zeigt, wie Sie die obige Methode verwenden könnten, indem Sie eine sendOrder von 1 in der Standard-Sendegruppe übergeben:
const url = "https://example.com/webtransport";
const datagrams = [new Uint8Array([65, 66, 67]), new Uint8Array([68, 69, 70])];
await sendDatagrams(url, datagrams, { sendOrder: 1 });
Spezifikationen
| Spezifikation |
|---|
| WebTransport> # dom-webtransportdatagramduplexstream-createwritable> |