Signatur
Beschreibung
Die schreibgeschützte Eigenschaft closed eines WebSocketStream-Objekts enthält ein Promise. Es wird erfüllt, sobald die WebSocket-Verbindung sauber geschlossen wurde, und liefert dann ein Objekt mit zwei Eigenschaften:
closeCode: der numerische Schließcode, den der Server oder Client gesendet hat, z. B.1000für ein normales Schließen.reason: ein String mit dem Grund, den der schließende Endpunkt mitgeschickt hat. Er kann leer sein.
Anders als beim klassischen WebSocket brauchst du keinen close-Event-Listener. Mit await wss.closed reagierst du direkt auf das Verbindungsende, zum Beispiel um Aufräumarbeiten zu erledigen, die Oberfläche zu aktualisieren oder eine neue Verbindung aufzubauen.
Wird die Verbindung nicht sauber geschlossen, etwa durch einen Netzwerkfehler, einen fehlgeschlagenen Handshake oder einen Abbruch über das signal, dann wird das Promise abgelehnt. Du solltest deshalb immer eine Fehlerbehandlung mit try…catch oder .catch() einbauen.
Rückgabewert
{ closeCode, reason } erfüllt wird. Bei einem Verbindungsfehler oder Abbruch wird es abgelehnt.Beispiele
Auf das Schließen der Verbindung warten
const wss = new WebSocketStream('wss://echo.websocket.org/');
const { readable, writable } = await wss.opened;
console.log('Verbindung offen');
try {
const { closeCode, reason } = await wss.closed;
console.log(`Geschlossen: Code ${closeCode}, Grund: "${reason}"`);
} catch (err) {
console.error('Verbindung unerwartet beendet:', err);
}
Selbst schließen und Ergebnis auswerten
const wss = new WebSocketStream('wss://example.com/chat');
const { writable } = await wss.opened;
const writer = writable.getWriter();
await writer.write('Tschüss!');
writer.releaseLock();
// Verbindung mit eigenem Code und Grund schließen
wss.close({ closeCode: 1000, reason: 'Benutzer hat sich abgemeldet' });
const info = await wss.closed;
console.log(info);
Automatischer Neuaufbau nach Verbindungsverlust
const connect = async (url, attempt = 0) => {
const wss = new WebSocketStream(url);
try {
await wss.opened;
attempt = 0;
const { closeCode } = await wss.closed;
if (closeCode === 1000) return; // normales Ende, kein Neuaufbau
} catch (err) {
console.warn('Fehler:', err.message);
}
const delay = Math.min(1000 * 2 ** attempt, 30000);
console.log(`Neuer Versuch in ${delay} ms`);
setTimeout(() => connect(url, attempt + 1), delay);
};
if ('WebSocketStream' in globalThis) {
connect('wss://example.com/live');
}
// Wichtig · Fallstricke
- Kompatibilität:
WebSocketStreamist nicht standardisiert und experimentell. Bisher gibt es die Schnittstelle nur in Chromium-basierten Browsern ab Version 124. Prüfe die Verfügbarkeit mit'WebSocketStream' in globalThisund greife sonst aufWebSocketzurück. - Ablehnung behandeln: Wenn die Verbindung nicht sauber geschlossen wird, etwa durch einen Netzwerkfehler, einen fehlgeschlagenen Handshake oder
AbortController.abort(), wirdclosedabgelehnt. Ohnecatchentsteht dann eine unbehandelte Promise-Ablehnung. - Scheitert der Verbindungsaufbau, werden sowohl
openedals auchclosedabgelehnt. Behandle beide Fälle. - Das Promise wird erst erfüllt, wenn der Schließ-Handshake abgeschlossen ist, nicht schon beim Aufruf von
close(). - Für
closeCodeinclose()sind nur1000oder Werte von3000bis4999erlaubt. Andere Werte führen zu einem Fehler.