Signatur
Beschreibung
Die Eigenschaft reliability eines WebTransport-Objekts zeigt, welche Art von Übertragung die aufgebaute Verbindung tatsächlich unterstützt. WebTransport läuft bevorzugt über HTTP/3 (QUIC). Dort gibt es neben zuverlässigen Streams auch unzuverlässige Datagramme, die verloren gehen oder in anderer Reihenfolge ankommen können. Ist HTTP/3 nicht verfügbar, kann der Browser auf HTTP/2 (TCP) ausweichen. Dann ist jede Übertragung zuverlässig, auch das, was über datagrams gesendet wird.
Die Eigenschaft kann drei Werte haben:
"pending": Die Verbindung wird noch aufgebaut, die Art der Übertragung steht noch nicht fest."reliable-only": Es wird nur zuverlässige Übertragung unterstützt, typischerweise beim Ausweichen auf HTTP/2."supports-unreliable": Unzuverlässige Übertragung wird unterstützt, typischerweise bei HTTP/3 bzw. QUIC.
Der Wert ist erst sinnvoll, wenn das Promise WebTransport.ready erfüllt ist. Nutzen Sie ihn, um die Anwendungslogik anzupassen. Ein Echtzeit-Spiel kann zum Beispiel Positionsdaten nur dann als Datagramme senden, wenn wirklich unzuverlässige Übertragung verfügbar ist. Sonst drohen bei Paketverlust Verzögerungen durch Head-of-Line-Blocking, und das Spiel sollte die Daten besser seltener oder gebündelt senden.
Wenn Ihre Anwendung zwingend unzuverlässige Übertragung braucht, übergeben Sie dem Konstruktor die Option requireUnreliable: true. Der Verbindungsaufbau scheitert dann, statt still auf eine nur zuverlässige Verbindung auszuweichen.
Rückgabewert
ready ist der Wert "pending".Beispiele
Übertragungsart nach dem Verbindungsaufbau prüfen
const transport = new WebTransport('https://example.com:4999/wt');
console.log(transport.reliability); // vor dem Aufbau
await transport.ready;
console.log(`Übertragungsart: ${transport.reliability}`);
Sendeweg für Echtzeit-Daten wählen
const connect = async (url) => {
const transport = new WebTransport(url);
await transport.ready;
if (transport.reliability === 'supports-unreliable') {
// Schnelle, verlustbehaftete Positionsdaten über Datagramme
const writer = transport.datagrams.writable.getWriter();
return (pos) => writer.write(new Float32Array([pos.x, pos.y]));
}
// Rückfallebene: ein zuverlässiger unidirektionaler Stream
console.warn('Nur zuverlässige Übertragung – Updates werden gedrosselt.');
const stream = await transport.createUnidirectionalStream();
const writer = stream.getWriter();
let last = 0;
return (pos) => {
const now = performance.now();
if (now - last < 100) return; // max. 10 Updates/s
last = now;
return writer.write(new Float32Array([pos.x, pos.y]));
};
};
const sendPosition = await connect('https://game.example.com/wt');
await sendPosition({ x: 12.5, y: 7.25 });
Unzuverlässige Übertragung erzwingen
try {
const transport = new WebTransport('https://example.com/wt', {
requireUnreliable: true // kein Ausweichen auf HTTP/2
});
await transport.ready;
console.log(transport.reliability);
} catch (err) {
console.error('HTTP/3 nicht verfügbar:', err.message);
}
// Wichtig · Fallstricke
- Zeitpunkt: Vor dem Erfüllen von
transport.readyliefert die Eigenschaft immer"pending". Prüfen Sie den Wert deshalb erst nachawait transport.ready. - Datagramme bei „reliable-only“: Die API
datagramsfunktioniert auch bei einer HTTP/2-Verbindung, die Daten werden dann aber zuverlässig und in Reihenfolge übertragen. Das ist langsamer und kann bei Paketverlust Verzögerungen erzeugen. - Kompatibilität: WebTransport selbst läuft in Chromium-Browsern und in neueren Firefox-Versionen, Safari unterstützt es nur eingeschränkt oder gar nicht.
reliabilityund die OptionrequireUnreliablekamen erst später hinzu und fehlen in manchen Browsern. Prüfen Sie die Unterstützung mit'reliability' in WebTransport.prototype, bevor Sie den Wert auswerten. - WebTransport ist nur in sicheren Kontexten (HTTPS) verfügbar, außerdem in Web Workern.