Start · Sprachen · JavaScript · Referenz · WebTransportDatagramDuplexStream.outgoingMaxAge

WebTransportDatagramDuplexStream.outgoingMaxAge

Eigenschaft

Liest oder setzt das maximale Alter in Millisekunden, das ausgehende Datagramme in der Sendewarteschlange erreichen dürfen, bevor sie verworfen werden.

seit JavaScript Chromium 97+, Firefox 114+; nur in sicheren Kontex Kategorie: webapi

Signatur

WebTransportDatagramDuplexStream.outgoingMaxAge

Beschreibung

Mit outgoingMaxAge legt man fest, wie lange ein ausgehendes Datagramm höchstens in der internen Sendewarteschlange einer WebTransport-Verbindung warten darf. Ist ein Datagramm älter als dieser Wert, bevor es tatsächlich über das Netz geht, verwirft der Browser es ohne Rückmeldung. Zugreifen kann man auf die Eigenschaft über transport.datagrams.outgoingMaxAge.

Datagramme sind grundsätzlich unzuverlässig und ungeordnet. Deshalb passen sie gut zu Daten, die schnell veralten, etwa Positionsdaten in Echtzeitspielen, Sensor-Messwerte oder Steuerbefehle. Ist die Verbindung überlastet, ist es oft besser, alte Pakete wegzuwerfen, als sie verspätet zu senden. Mit outgoingMaxAge lässt sich genau das steuern.

Der Standardwert ist null, das heißt: Es gibt kein Höchstalter und der Browser hält Datagramme so lange vor, wie es seine eigene Warteschlangen-Strategie erlaubt. Setzt man 0, wird der Wert ebenfalls als null behandelt. Negative Werte und NaN sind ungültig und lösen einen RangeError aus.

Parameter

Name Typ Default Beschreibung
$value (Setter) number | null null Höchstalter in Millisekunden. null oder 0 bedeuten: kein Höchstalter. Negative Werte oder NaN führen zu einem RangeError.

Rückgabewert

Typ
number | null
Beschreibung
Das aktuell eingestellte Höchstalter für ausgehende Datagramme in Millisekunden oder null, wenn keins festgelegt ist.

Beispiele

Aktuellen Wert auslesen und Höchstalter setzen

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

console.log(transport.datagrams.outgoingMaxAge); // Standardwert

// Positionsdaten, die älter als 100 ms sind, nicht mehr senden
transport.datagrams.outgoingMaxAge = 100;
console.log(transport.datagrams.outgoingMaxAge);
null 100

Echtzeit-Positionsupdates in einem Spiel

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

const { datagrams } = transport;
datagrams.outgoingMaxAge = 50; // ca. drei Frames bei 60 fps

const writer = datagrams.writable.getWriter();
const encoder = new TextEncoder();

const sendPosition = async (x, y) => {
  const payload = encoder.encode(JSON.stringify({ x, y, t: Date.now() }));
  await writer.write(payload); // veraltete Pakete verwirft der Browser
};

setInterval(() => sendPosition(Math.random() * 800, Math.random() * 600), 16);

Ungültige Werte abfangen und Limit zurücksetzen

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

try {
  transport.datagrams.outgoingMaxAge = -10;
} catch (err) {
  console.log(err.name);
}

// Kein Höchstalter mehr
transport.datagrams.outgoingMaxAge = null;
console.log(transport.datagrams.outgoingMaxAge);
RangeError null

// Wichtig · Fallstricke

  • Verwerfen ohne Rückmeldung: Wird ein Datagramm wegen outgoingMaxAge verworfen, gibt es weder einen Fehler noch ein Ereignis. Auch das Promise von writer.write() meldet nicht, ob das Paket wirklich gesendet wurde.
  • Einheit: Der Wert wird in Millisekunden angegeben, nicht in Sekunden.
  • 0 heißt nicht „sofort verwerfen“: 0 wird wie null behandelt, also als „kein Höchstalter“.
  • Die Eigenschaft wirkt nur auf die Wartezeit im Browser. Verluste oder Verzögerungen im Netzwerk selbst beeinflusst sie nicht.
  • Kompatibilität: WebTransport wird in Chromium-basierten Browsern und in Firefox unterstützt. In Safari ist die Unterstützung erst neu oder fehlt noch. Bei älteren Implementierungen weichen einzelne Eigenschaften teils von der aktuellen Spezifikation ab. Vorher per 'WebTransport' in globalThis prüfen. Die API funktioniert nur über HTTPS und setzt einen HTTP/3-fähigen Server voraus.