Start · Sprachen · JavaScript · Referenz · WebTransport.reliability

WebTransport.reliability

Eigenschaft

Schreibgeschützter String, der angibt, ob eine WebTransport-Verbindung nur zuverlässige Übertragung erlaubt oder auch unzuverlässige Datagramme (wie bei UDP) unterstützt.

seit JavaScript Nur Chromium-Browser (Chrome/Edge); nicht Baseline Kategorie: webapi

Signatur

get WebTransport.reliability

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

Typ
"pending" | "reliable-only" | "supports-unreliable"
Beschreibung
Ein String, der angibt, welche Art von Übertragung die Verbindung unterstützt. Vor dem Erfüllen von 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}`);
pending Übertragungsart: supports-unreliable

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);
}
supports-unreliable

// Wichtig · Fallstricke

  • Zeitpunkt: Vor dem Erfüllen von transport.ready liefert die Eigenschaft immer "pending". Prüfen Sie den Wert deshalb erst nach await transport.ready.
  • Datagramme bei „reliable-only“: Die API datagrams funktioniert 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. reliability und die Option requireUnreliable kamen 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.