Signatur
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
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 })));
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);
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);
// Wichtig · Fallstricke
- Kompatibilität:
WebTransportDatagramsWritableundcreateWritable()sind experimentell und werden nur von einigen Browsern unterstützt, etwa aktuellen Chromium-Versionen. Prüfe vorher, obtransport.datagrams.createWritableverfügbar ist. Ältere Umsetzungen kennen nur das veraltetedatagrams.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 hatsendOrderkeine 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.outgoingMaxAgeverworfen 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.