Zum Hauptinhalt springen

7. Closing the Connection (Verbindung schließen)

7.1 Definitions (Definitionen)

7.1.1 Closing the WebSocket Connection (WebSocket-Verbindung schließen)

Das Schließen der WebSocket-Verbindung bedeutet das Schließen der zugrunde liegenden TCP-Verbindung.

7.1.2 Start the WebSocket Closing Handshake (WebSocket-Schließ-Handshake starten)

Senden eines Close-Kontroll-Frames, um den Schließ-Handshake zu initiieren.

7.1.3 The WebSocket Closing Handshake is Started (Der WebSocket-Schließ-Handshake ist gestartet)

Der Handshake beginnt, wenn ein Endpoint einen Close-Frame sendet.

7.1.4 The WebSocket Connection is Closed (Die WebSocket-Verbindung ist geschlossen)

Die Verbindung gilt als geschlossen, wenn die zugrunde liegende TCP-Verbindung geschlossen ist.

7.1.5 The WebSocket Connection Close Code (WebSocket-Verbindungs-Schließcode)

Der im Close-Frame enthaltene Statuscode.

7.1.6 The WebSocket Connection Close Reason (WebSocket-Verbindungs-Schließgrund)

Der optionale Textgrund im Close-Frame.

7.1.7 Fail the WebSocket Connection (WebSocket-Verbindung fehlschlagen lassen)

Die Verbindung aufgrund eines Fehlers sofort schließen, ohne einen Close-Frame zu senden.

7.2 Abnormal Closures (Abnormale Schließungen)

7.2.1 Client-Initiated Closure (Vom Client initiierte Schließung)

Wenn der Client einen Fehler erkennt, sollte er die Verbindung schließen.

7.2.2 Server-Initiated Closure (Vom Server initiierte Schließung)

Wenn der Server einen Fehler erkennt, sollte er die Verbindung schließen.

7.2.3 Recovering from Abnormal Closure (Wiederherstellung nach abnormaler Schließung)

Anwendungen sollten Wiederverbindungsmechanismen implementieren.

7.3 Normal Closure of Connections (Normale Schließung von Verbindungen)

Normaler Schließvorgang:

  1. Initiator sendet Close-Frame
  2. Empfänger sendet Close-Frame-Antwort nach Empfang des Close-Frames
  3. Empfänger schließt TCP-Verbindung
  4. Initiator schließt ebenfalls TCP-Verbindung nach Empfang des Close-Frames
// Client normale Schließung
ws.close(1000, 'Normal closure');

// Serverseitige Behandlung
ws.on('close', (code, reason) => {
console.log(`Verbindung geschlossen: ${code} - ${reason}`);
});

7.4 Status Codes (Statuscodes)

7.4.1 Defined Status Codes (Definierte Statuscodes)

CodeNameBeschreibung
1000Normal ClosureNormale Schließung
1001Going AwayEndpoint geht weg (z.B. Seitennavigation)
1002Protocol ErrorProtokollfehler
1003Unsupported DataNicht unterstützter Datentyp
1005No Status RcvdReserviert, sollte nicht in Close-Frame verwendet werden
1006Abnormal ClosureReserviert, zeigt abnormale Verbindungsschließung an
1007Invalid frame payload dataUngültige Frame-Payload-Daten (z.B. ungültiges UTF-8)
1008Policy ViolationRichtlinienverletzung
1009Message Too BigNachricht zu groß
1010Mandatory Ext.Vom Client erwartete Erweiterung nicht ausgehandelt
1011Internal ErrorInterner Serverfehler
1015TLS handshakeTLS-Handshake-Fehler (reserviert)

7.4.2 Reserved Status Code Ranges (Reservierte Statuscode-Bereiche)

  • 0-999: Nicht verwendet
  • 1000-2999: Protokolldefiniert
  • 3000-3999: Bibliothek/Framework-Verwendung
  • 4000-4999: Anwendungsverwendung

Close-Frame-Struktur

+--------+--------+------------------+
| Status | Reason |
| Code | (optional) |
| (2 Bytes)| (UTF-8-Text) |
+--------+--------+------------------+