Start · Sprachen · JavaScript · Referenz · WebTransport.congestionControl

WebTransport.congestionControl

Eigenschaft

Nur-Lese-Eigenschaft, die angibt, ob die WebTransport-Verbindung beim Senden hohen Durchsatz (<code>"throughput"</code>), geringe Latenz (<code>"low-latency"</code>) oder den Standard (<code>"default"</code>) bevorzugt.

seit JavaScript Experimentell: Chromium 125+ (Chrome, Edge, Opera) Kategorie: webapi

Signatur

WebTransport.congestionControl

Beschreibung

Die Eigenschaft congestionControl einer WebTransport-Instanz liefert die Präferenz der Anwendung für den Staukontroll-Algorithmus (Congestion Control), den der Browser beim Senden von Daten über die HTTP/3-Verbindung verwenden soll. Mögliche Werte sind "default", "throughput" und "low-latency".

Der Wert wird beim Erzeugen der Verbindung über die gleichnamige Option im Konstruktor gesetzt: new WebTransport(url, { congestionControl: "low-latency" }). Danach lässt er sich nicht mehr ändern. Wird die Option weggelassen, gilt "default".

Die Präferenz ist nur ein Hinweis an den Browser. Unterstützt er den gewünschten Algorithmus nicht (oder kann er ihn für diese Verbindung nicht einsetzen), fällt er still auf den Standard zurück. Die Eigenschaft gibt dann "default" zurück. Deshalb sollte man den Wert nach dem Aufbau der Verbindung prüfen, statt sich auf die angeforderte Einstellung zu verlassen.

Typische Einsatzfälle: "low-latency" eignet sich für Echtzeit-Anwendungen wie Cloud-Gaming, Videokonferenzen oder Live-Steuerung, bei denen es auf schnelle Zustellung ankommt. "throughput" passt zu Massen-Uploads oder Datei-Synchronisierung, bei denen die Gesamtbandbreite zählt.

Rückgabewert

Typ
"default" | "throughput" | "low-latency"
Beschreibung
Ein String mit der tatsächlich verwendeten Staukontroll-Präferenz. Konnte der Browser die gewünschte Präferenz nicht erfüllen, ist der Wert "default".

Beispiele

Verbindung mit Low-Latency-Präferenz öffnen und prüfen

const transport = new WebTransport("https://game.example.com:4433/session", {
  congestionControl: "low-latency",
});

await transport.ready;

console.log(`Staukontrolle: ${transport.congestionControl}`);
Staukontrolle: low-latency

Fallback erkennen und Anwendung anpassen

const connect = async (url) => {
  const transport = new WebTransport(url, { congestionControl: "low-latency" });
  await transport.ready;

  if (transport.congestionControl !== "low-latency") {
    // Browser hat die Präferenz ignoriert -> z. B. geringere Update-Rate wählen
    console.warn("Low-Latency nicht verfügbar, nutze Standard-Staukontrolle.");
    return { transport, tickRate: 30 };
  }
  return { transport, tickRate: 60 };
};

const { transport, tickRate } = await connect("https://game.example.com:4433/session");
console.log(transport.congestionControl, tickRate);
Low-Latency nicht verfügbar, nutze Standard-Staukontrolle. default 30

Durchsatz-Präferenz für einen großen Upload

const uploadFile = async (file) => {
  const transport = new WebTransport("https://upload.example.com:4433/files", {
    congestionControl: "throughput",
  });
  await transport.ready;
  console.log("Modus:", transport.congestionControl);

  const stream = await transport.createUnidirectionalStream();
  await file.stream().pipeTo(stream);
  transport.close();
};

document.querySelector("#file").addEventListener("change", (e) => {
  const [file] = e.target.files;
  if (file) uploadFile(file);
});
Modus: throughput

Feature-Erkennung vor der Nutzung

const supportsCongestionControl =
  "WebTransport" in globalThis &&
  "congestionControl" in WebTransport.prototype;

console.log(supportsCongestionControl ? "unterstützt" : "nicht unterstützt");
unterstützt

// Wichtig · Fallstricke

  • Nur ein Hinweis: Der Browser muss die Präferenz nicht umsetzen. Prüfe den Wert deshalb immer nach await transport.ready. Wird sie nicht umgesetzt, ist der Wert "default", und es wird kein Fehler geworfen.
  • Nur lesbar: Eine Zuweisung wie transport.congestionControl = "throughput" hat keine Wirkung (im Strict Mode gibt es einen TypeError). Die Präferenz lässt sich nur im Konstruktor festlegen.
  • Browser-Kompatibilität: Die Eigenschaft ist experimentell und derzeit nur in Chromium-basierten Browsern verfügbar. Firefox unterstützt zwar WebTransport, aber nicht diese Eigenschaft (Zugriff liefert undefined). Safari unterstützt WebTransport noch nicht. Nutze eine Feature-Erkennung.
  • WebTransport funktioniert nur in sicheren Kontexten (HTTPS) und braucht einen HTTP/3-fähigen Server. Außerdem steht es in Web Workers zur Verfügung.
  • Die Präferenz betrifft nur die Sendeseite des Clients. Wie der Server Daten sendet, bestimmt die Server-Implementierung.