Signatur
Beschreibung
Mit sendOrder legst du fest, in welcher Reihenfolge der Browser ausstehende Daten mehrerer ausgehender WebTransport-Streams auf die Leitung gibt. Der Wert ist eine ganze Zahl. Streams mit einem höheren Wert werden bevorzugt: Solange ein Stream mit höherer sendOrder Daten zum Senden hat, müssen Streams mit niedrigerem Wert warten. Streams mit gleichem Wert teilen sich die verfügbare Bandbreite fair.
Den Anfangswert kannst du schon beim Erzeugen über die Option sendOrder von WebTransport.createUnidirectionalStream() oder WebTransport.createBidirectionalStream() setzen. Weil die Eigenschaft beschreibbar ist, lässt sich die Priorität aber auch zur Laufzeit ändern, etwa wenn ein Datenstrom plötzlich wichtiger wird (Nutzer springt im Video an eine neue Stelle, ein Spielzustand muss sofort raus).
Typische Einsatzfälle sind Echtzeitanwendungen wie Spiele, Live-Video oder Kollaborationswerkzeuge. Dort werden zeitkritische Daten (Steuerbefehle, aktuelle Frames) vor weniger dringenden Daten (Chat-Verlauf, Vorabladen von Assets) gesendet. Über sendGroup lassen sich Streams zusätzlich zu Gruppen zusammenfassen. sendOrder ordnet dann nur innerhalb der jeweiligen Gruppe.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value (beim Setzen) | number | 0 | Ganzzahlige Priorität (in der Spezifikation long long). Größere Werte werden zuerst gesendet. Negative Werte sind erlaubt. Ältere Implementierungen akzeptieren auch null für „keine Priorität“. |
Rückgabewert
0. Ältere Browser-Versionen liefern hier gegebenenfalls null.Beispiele
Priorität beim Erzeugen festlegen und auslesen
const transport = new WebTransport('https://example.com:4433/game');
await transport.ready;
// Steuerbefehle: hohe Priorität
const controlStream = await transport.createUnidirectionalStream({ sendOrder: 100 });
// Asset-Download: niedrige Priorität
const assetStream = await transport.createUnidirectionalStream({ sendOrder: 1 });
console.log(controlStream.sendOrder, assetStream.sendOrder);
Priorität zur Laufzeit anheben
const transport = new WebTransport('https://example.com:4433/video');
await transport.ready;
const prefetch = await transport.createUnidirectionalStream({ sendOrder: 0 });
const writer = prefetch.getWriter();
// Der Nutzer braucht diese Daten jetzt sofort, also Priorität erhöhen
const makeUrgent = () => {
prefetch.sendOrder = 50;
console.log('Neue Priorität:', prefetch.sendOrder);
};
makeUrgent();
await writer.write(new TextEncoder().encode('segment-42'));
Bidirektionaler Stream: Priorität der Sendeseite setzen
const transport = new WebTransport('https://example.com:4433/chat');
await transport.ready;
const { readable, writable } = await transport.createBidirectionalStream({ sendOrder: 10 });
// writable ist ein WebTransportSendStream
console.log('Sendepriorität:', writable.sendOrder);
writable.sendOrder = -5; // Chat soll hinter anderen Daten zurückstehen
console.log('Jetzt:', writable.sendOrder);
// Wichtig · Fallstricke
- Nur ein Hinweis, keine Garantie:
sendOrderbeeinflusst nur die Reihenfolge, in der gepufferte Daten gesendet werden. Bereits abgeschickte Pakete, Neuübertragungen und das Verhalten des Netzes liegen außerhalb dieser Steuerung. - Verhungern: Solange Streams mit hoher Priorität ständig Daten liefern, kann es passieren, dass Streams mit niedriger Priorität gar nicht zum Zug kommen. Vergib hohe Werte deshalb nur für kurze oder dringende Datenströme.
- Semantik hat sich geändert: Frühe Implementierungen erlaubten
null(Stream ohne Priorität, wird zuletzt gesendet). Die aktuelle Spezifikation verwendet stattdessen die Ganzzahl0als Standardwert. Frag den Wert nicht über einen Vergleich mitnullab. - Sendegruppen: Gehören Streams zu unterschiedlichen
sendGroup-Gruppen, werden ihresendOrder-Werte nicht direkt miteinander verglichen. - Kompatibilität: WebTransport steht nur in sicheren Kontexten (HTTPS) zur Verfügung und braucht einen HTTP/3-Server. Chromium-basierte Browser unterstützen
sendOrder, Firefox teilweise, Safari bisher nicht oder nur eingeschränkt. Prüfe vor der Nutzung, ob die Funktion vorhanden ist, zum Beispiel mit'sendOrder' in stream.