Start · Sprachen · JavaScript · Referenz · WebTransportDatagramsWritable.sendOrder

WebTransportDatagramsWritable.sendOrder

Eigenschaft

Liest oder setzt die Sendepriorität der Datagramme dieses beschreibbaren Streams relativ zu anderen Streams und Datagrammen derselben <code>sendGroup</code>, als Ganzzahl.

seit JavaScript Experimentell – eingeschränkte Browser-Unterstützu Kategorie: webapi

Signatur

WebTransportDatagramsWritable.sendOrder

Beschreibung

Die Eigenschaft sendOrder eines WebTransportDatagramsWritable legt fest, mit welcher Priorität dessen Datagramme gegenüber anderen ausgehenden Daten derselben Verbindung verschickt werden. Verglichen wird dabei nur mit Streams und Datagramm-Writables, die zur selben WebTransportSendGroup gehören (oder ebenfalls keiner Gruppe zugeordnet sind). Es gilt: Je höher der Wert, desto früher wird gesendet. Daten mit gleichem sendOrder teilen sich die Bandbreite fair.

Ein WebTransportDatagramsWritable bekommst du über transport.datagrams.createWritable({ sendGroup, sendOrder }). Der dort angegebene Startwert lässt sich danach jederzeit über diese Eigenschaft ändern. So kannst du zur Laufzeit umpriorisieren, zum Beispiel Steuer- oder Positionsdaten in einem Spiel bevorzugen, während Telemetrie-Datagramme nachrangig laufen.

Wichtig: sendOrder beeinflusst nur, in welcher Reihenfolge die Daten lokal an den Netzwerk-Stack übergeben werden, wenn die Leitung ausgelastet ist. Es gibt keine Garantie für Zustellung oder Empfangsreihenfolge. Datagramme bleiben unzuverlässig und können verloren gehen.

Parameter

Name Typ Default Beschreibung
$value number 0 Nur beim Setzen: Ganzzahl (intern long long), auch negativ möglich. Höhere Werte bedeuten höhere Priorität innerhalb der sendGroup.

Rückgabewert

Typ
number
Beschreibung
Die aktuelle Sendepriorität als Ganzzahl. Wurde bei createWritable() nichts angegeben, ist der Wert 0.

Beispiele

Datagramm-Writable mit Priorität anlegen und auslesen

const transport = new WebTransport('https://example.com:4433/game');
await transport.ready;

// Hohe Priorität für Eingabe-Events
const inputWritable = transport.datagrams.createWritable({ sendOrder: 100 });
console.log(inputWritable.sendOrder);

const writer = inputWritable.getWriter();
await writer.write(new TextEncoder().encode(JSON.stringify({ key: 'W', down: true })));
100

Telemetrie und Steuerdaten in einer sendGroup priorisieren

const transport = new WebTransport('https://example.com:4433/live');
await transport.ready;

const group = transport.createSendGroup();

const control = transport.datagrams.createWritable({ sendGroup: group, sendOrder: 10 });
const telemetry = transport.datagrams.createWritable({ sendGroup: group, sendOrder: -5 });

// Stream in derselben Gruppe: liegt zwischen den beiden Datagramm-Writables
const logStream = await transport.createUnidirectionalStream({ sendGroup: group, sendOrder: 0 });

console.log(control.sendOrder, logStream.sendOrder, telemetry.sendOrder);
10 0 -5

Priorität zur Laufzeit anpassen

const transport = new WebTransport('https://example.com:4433/stream');
await transport.ready;

const positions = transport.datagrams.createWritable({ sendOrder: 0 });

// Wenn der Nutzer aktiv spielt, Positionsdaten bevorzugen
const setActive = (active) => {
  positions.sendOrder = active ? 50 : 0;
  console.log('Neue Priorität:', positions.sendOrder);
};

setActive(true);
setActive(false);
Neue Priorität: 50 Neue Priorität: 0

// Wichtig · Fallstricke

  • Kompatibilität: WebTransportDatagramsWritable und createWritable() sind experimentell und werden nur von einigen Browsern unterstützt, etwa aktuellen Chromium-Versionen. Prüfe vorher, ob transport.datagrams.createWritable verfügbar ist. Ältere Umsetzungen kennen nur das veraltete datagrams.writable.
  • WebTransport gibt es nur in sicheren Kontexten (HTTPS). Der Server muss HTTP/3 unterstützen.
  • Priorisiert wird nur innerhalb derselben sendGroup. Zwischen verschiedenen Gruppen hat sendOrder keine Wirkung, dort teilt der Browser die Bandbreite fair auf.
  • Datagramme mit niedriger Priorität können bei Stau länger in der Warteschlange bleiben und nach datagrams.outgoingMaxAge verworfen werden. Eine niedrige Priorität kann also zu Datenverlust führen.
  • Der Wert ist ein Hinweis an den Browser, keine Garantie für Reihenfolge oder Zustellung beim Empfänger.