Signatur
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
"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}`);
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);
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);
});
Feature-Erkennung vor der Nutzung
const supportsCongestionControl =
"WebTransport" in globalThis &&
"congestionControl" in WebTransport.prototype;
console.log(supportsCongestionControl ? "unterstützt" : "nicht 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 einenTypeError). 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 liefertundefined). 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.