Signatur
Beschreibung
Die Eigenschaft readyState einer WebSocket-Instanz zeigt, in welchem Abschnitt ihres Lebenszyklus die Verbindung gerade ist. Der Wert ist eine Ganzzahl. Zu jedem Wert gibt es eine statische Konstante, die sowohl am Konstruktor (WebSocket.OPEN) als auch an jeder Instanz (socket.OPEN) verfügbar ist:
0– CONNECTING: Das Objekt wurde erzeugt, aber die Verbindung ist noch nicht aufgebaut.1– OPEN: Die Verbindung steht, Daten können mitsend()gesendet werden.2– CLOSING: Die Verbindung wird gerade geschlossen, etwa nach einem Aufruf vonclose().3– CLOSED: Die Verbindung ist geschlossen oder ließ sich gar nicht erst öffnen.
In der Praxis prüft man readyState vor allem, bevor man mit send() Daten sendet. Ein Aufruf im Zustand CONNECTING wirft eine InvalidStateError-DOMException. In den Zuständen CLOSING und CLOSED werden die Daten dagegen stillschweigend verworfen. Die Eigenschaft hilft außerdem bei Verbindungsanzeigen in der Oberfläche und bei Logik zum automatischen Neuverbinden.
Der Zustand ändert sich immer nur in eine Richtung (0 → 1 → 2 → 3). Ein geschlossener Socket lässt sich nicht wieder öffnen: Für eine neue Verbindung braucht man eine neue WebSocket-Instanz. Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird im nicht-strikten Modus ignoriert und löst im Strict Mode einen TypeError aus.
Rückgabewert
0 (CONNECTING), 1 (OPEN), 2 (CLOSING) oder 3 (CLOSED).Beispiele
Zustand im Lebenszyklus beobachten
const socket = new WebSocket('wss://echo.websocket.org');
console.log('Direkt nach Erzeugung:', socket.readyState);
socket.addEventListener('open', () => {
console.log('Nach open:', socket.readyState);
socket.close();
console.log('Nach close():', socket.readyState);
});
socket.addEventListener('close', () => {
console.log('Nach close-Event:', socket.readyState);
});
Sicheres Senden mit Warteschlange
const socket = new WebSocket('wss://example.com/chat');
const queue = [];
const safeSend = (data) => {
if (socket.readyState === WebSocket.OPEN) {
socket.send(data);
} else if (socket.readyState === WebSocket.CONNECTING) {
queue.push(data); // später senden
} else {
console.warn('Verbindung geschlossen – Nachricht verworfen:', data);
}
};
socket.addEventListener('open', () => {
while (queue.length) socket.send(queue.shift());
});
safeSend(JSON.stringify({ type: 'hello', user: 'anna' }));
Zustand lesbar anzeigen und automatisch neu verbinden
const STATE_NAMES = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
let socket;
const connect = () => {
socket = new WebSocket('wss://example.com/live');
socket.addEventListener('close', () => {
console.log('Status:', STATE_NAMES[socket.readyState]);
setTimeout(connect, 2000); // neue Instanz nötig
});
};
connect();
setInterval(() => {
console.log('Aktueller Status:', STATE_NAMES[socket.readyState]);
}, 5000);
// Wichtig · Fallstricke
- Vergleiche mit Konstanten statt mit Zahlen:
socket.readyState === WebSocket.OPENliest sich besser als=== 1. Achtung: In Node.js mit der Bibliothekwssind die Konstanten ebenfalls vorhanden, bei eigenen Mock-Objekten in Tests aber nicht immer. - Senden im Zustand
CONNECTINGwirft einenInvalidStateError. Warte daher auf dasopen-Event oder puffere die Nachrichten. - Senden im Zustand
CLOSINGoderCLOSEDwirft keinen Fehler, die Daten gehen aber verloren.bufferedAmountwächst dabei weiter. - Der Wert
OPENgarantiert nicht, dass die Gegenstelle noch erreichbar ist. Ein Netzabbruch fällt oft erst verzögert auf. Für belastbare Verbindungen braucht man Heartbeats (Ping/Pong auf Anwendungsebene). - Nach
CLOSEDgibt es keinen Weg zurück, fürs Neuverbinden ist immernew WebSocket()nötig. - Die Eigenschaft wird in allen modernen Browsern unterstützt, ebenso nativ in Node.js ab Version 22 (globales
WebSocket).