Signatur
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
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);
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);
// Wichtig · Fallstricke
- Verwerfen ohne Rückmeldung: Wird ein Datagramm wegen
outgoingMaxAgeverworfen, gibt es weder einen Fehler noch ein Ereignis. Auch das Promise vonwriter.write()meldet nicht, ob das Paket wirklich gesendet wurde. - Einheit: Der Wert wird in Millisekunden angegeben, nicht in Sekunden.
0heißt nicht „sofort verwerfen“:0wird wienullbehandelt, 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 globalThisprüfen. Die API funktioniert nur über HTTPS und setzt einen HTTP/3-fähigen Server voraus.