Signatur
Beschreibung
Die Eigenschaft incomingHighWaterMark einer WebTransportDatagramDuplexStream-Instanz (erreichbar über transport.datagrams) bestimmt die High Water Mark des eingehenden ReadableStream. Das ist die maximale Anzahl an Datagrammen, die in der internen Warteschlange liegen dürfen, bevor Gegendruck (Backpressure) greift. Die Größe wird in Paketen gezählt, nicht in Bytes.
Datagramme sind unzuverlässig und ungeordnet. Deshalb werden eingehende Pakete bei voller Warteschlange nicht zurückgehalten, sondern verworfen, sobald die Anwendung zu langsam liest. Ein höherer Wert glättet kurze Lastspitzen, etwa bei Spielen oder Telemetrie. Er kostet aber Speicher, und die ältesten Pakete sind beim Lesen womöglich schon veraltet.
Setzt du die Eigenschaft, gilt der neue Wert sofort. Er beeinflusst, wie viele Pakete der Browser puffert, bevor er verwirft. Zusammen mit incomingMaxAge lässt sich so steuern, wie „frisch“ die gelesenen Daten sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | number | implementierungsabhängig (z. B. 1) | Nur beim Setzen: neue High Water Mark in Paketen. Muss eine nicht-negative Zahl sein. Werte unter 1 werden intern auf 1 angehoben. |
Rückgabewert
Beispiele
Aktuellen Wert auslesen
const transport = new WebTransport('https://example.com:4433/game');
await transport.ready;
const { datagrams } = transport;
console.log('Eingehende HWM:', datagrams.incomingHighWaterMark);
Puffer für Lastspitzen vergrößern
const transport = new WebTransport('https://example.com:4433/telemetry');
await transport.ready;
// Bis zu 64 Pakete puffern, bevor verworfen wird
transport.datagrams.incomingHighWaterMark = 64;
// Pakete, die älter als 100 ms sind, trotzdem verwerfen
transport.datagrams.incomingMaxAge = 100;
const reader = transport.datagrams.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) break;
console.log('Empfangen:', value.byteLength, 'Bytes');
}
Unterstützung prüfen und Wert anpassen
const configureIncoming = (transport, packets) => {
const d = transport.datagrams;
if (!('incomingHighWaterMark' in d)) {
console.warn('incomingHighWaterMark nicht unterstützt');
return;
}
d.incomingHighWaterMark = Math.max(1, packets);
console.log('Neu gesetzt:', d.incomingHighWaterMark);
};
const transport = new WebTransport('https://example.com:4433/chat');
await transport.ready;
configureIncoming(transport, 16);
// Wichtig · Fallstricke
- Kompatibilität: WebTransport gibt es in Chromium-Browsern ab Version 97 und in Firefox ab Version 114. Safari unterstützt es derzeit nicht. Außerdem ist ein sicherer Kontext (HTTPS) und ein HTTP/3-Server nötig.
- Die Einheit sind Pakete, nicht Bytes. Ein hoher Wert kann bei großen Datagrammen viel Speicher belegen.
- Ist die Warteschlange voll, verwirft der Browser Datagramme stillschweigend. Es gibt kein Ereignis und keinen Fehler. Wenn die Daten vollständig ankommen müssen, nimm Streams (
createBidirectionalStream()) statt Datagrammen. - Negative Werte oder
NaNkönnen einenRangeErrorauslösen. Prüfe den Wert deshalb vor dem Setzen. - Ein großer Puffer erhöht die Latenz: Du liest dann eventuell veraltete Pakete. Kombiniere die Eigenschaft deshalb mit
incomingMaxAge.