Start · Sprachen · JavaScript · Referenz · WebTransportSendStream.sendOrder

WebTransportSendStream.sendOrder

Eigenschaft

Liest oder setzt die Sendepriorität eines <code>WebTransportSendStream</code> im Verhältnis zu anderen Streams derselben Verbindung bzw. Sendegruppe.

seit JavaScript Chromium-Browser und Firefox (eingeschränkt), nich Kategorie: webapi

Signatur

WebTransportSendStream.sendOrder

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

Typ
number | null
Beschreibung
Die aktuelle Sendepriorität des Streams. Ohne ausdrückliche Angabe ist das laut aktueller Spezifikation 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);
100 1

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'));
Neue Priorität: 50

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);
Sendepriorität: 10 Jetzt: -5

// Wichtig · Fallstricke

  • Nur ein Hinweis, keine Garantie: sendOrder beeinflusst 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 Ganzzahl 0 als Standardwert. Frag den Wert nicht über einen Vergleich mit null ab.
  • Sendegruppen: Gehören Streams zu unterschiedlichen sendGroup-Gruppen, werden ihre sendOrder-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.