Signatur
Beschreibung
Die Eigenschaft closed einer WebTransport-Instanz gibt ein Promise zurück, das den Lebenszyklus-Abschluss der Sitzung abbildet. Bei einem geordneten Schließen – egal ob durch transport.close() auf dem Client oder durch den Server – wird es mit einem WebTransportCloseInfo-Objekt erfüllt. Dieses enthält closeCode (eine vorzeichenlose 32-Bit-Zahl) und reason (einen String mit dem Grund).
Bricht die Verbindung dagegen ungeordnet ab, etwa durch einen Netzwerkfehler, einen Zeitablauf oder einen misslungenen Verbindungsaufbau, wird das Promise mit einem WebTransportError abgelehnt. Deshalb sollte man closed immer mit try/catch bzw. .catch() behandeln.
Typische Anwendungsfälle sind Aufräumarbeiten nach Sitzungsende (Timer stoppen, UI aktualisieren, Ressourcen freigeben), Logging von Close-Codes und Logik für automatische Neuverbindungen. closed ergänzt WebTransport.ready, das den erfolgreichen Verbindungsaufbau meldet.
Rückgabewert
Promise, das mit { closeCode: number, reason: string } erfüllt wird, wenn die Sitzung geordnet geschlossen wurde, oder mit einem WebTransportError abgelehnt wird, wenn sie abbricht. Für eine Instanz wird immer dasselbe Promise-Objekt zurückgegeben.Beispiele
Geordnetes Schließen erkennen
const transport = new WebTransport('https://example.com:4433/wt');
await transport.ready;
// Überwachung vor dem Schließen einrichten
transport.closed.then(({ closeCode, reason }) => {
console.log(`Geschlossen – Code ${closeCode}, Grund: "${reason}"`);
});
// Später: Sitzung selbst beenden
transport.close({ closeCode: 1000, reason: 'Sitzung beendet' });
Abbruch und Fehler mit async/await behandeln
const connect = async (url) => {
const transport = new WebTransport(url);
try {
await transport.ready;
console.log('Verbunden');
const info = await transport.closed;
console.log('Sauber geschlossen:', info.closeCode, info.reason);
} catch (err) {
// WebTransportError bei Netzwerkabbruch oder fehlgeschlagenem Aufbau
console.error('Verbindung abgebrochen:', err.name, err.message, err.source);
}
};
connect('https://example.com:4433/wt');
Automatische Neuverbindung mit Backoff
const startSession = async (url, attempt = 0) => {
const transport = new WebTransport(url);
transport.closed
.then(({ closeCode }) => {
console.log('Server hat geschlossen, Code', closeCode);
})
.catch(() => {
const delay = Math.min(1000 * 2 ** attempt, 30000);
console.warn(`Abbruch – neuer Versuch in ${delay} ms`);
setTimeout(() => startSession(url, attempt + 1), delay);
});
try {
await transport.ready;
attempt = 0;
console.log('Sitzung aktiv');
} catch {
// Fehler wird bereits über closed behandelt
}
return transport;
};
startSession('https://example.com:4433/wt');
// Wichtig · Fallstricke
- Ablehnung immer abfangen: Schlägt schon der Verbindungsaufbau fehl, werden sowohl
readyals auchclosedabgelehnt. Ohne.catch()entsteht eine unhandled promise rejection. - Der
reason-String ist auf 1024 Byte (UTF-8) begrenzt; längere Gründe werden gekürzt.closeCodeist eine vorzeichenlose 32-Bit-Zahl. - Wird
close()ohne Argumente aufgerufen, istcloseCode0undreasonein leerer String. - Beim Schließen der Sitzung werden auch alle offenen Streams und Datagramme beendet; ausstehende Lese- und Schreibvorgänge schlagen fehl.
- Kompatibilität: WebTransport setzt HTTP/3 (QUIC) auf dem Server und einen sicheren Kontext (HTTPS) voraus. Unterstützt in Chromium-Browsern ab Version 97 und Firefox ab 114, auch in Web Workers; Safari erst in neueren Versionen. Vorher per
'WebTransport' in globalThisauf Unterstützung prüfen.