Passa al contenuto principale

7. Closing the Connection (Chiusura della connessione)

7.1 Definitions (Definizioni)

7.1.1 Closing the WebSocket Connection (Chiusura della connessione WebSocket)

Chiudere la connessione WebSocket significa chiudere la connessione TCP sottostante.

7.1.2 Start the WebSocket Closing Handshake (Avvio dell'handshake di chiusura WebSocket)

Inviare un frame di controllo Close per avviare l'handshake di chiusura.

7.1.3 The WebSocket Closing Handshake is Started (L'handshake di chiusura WebSocket è iniziato)

L'handshake inizia quando uno degli endpoint invia un frame Close.

7.1.4 The WebSocket Connection is Closed (La connessione WebSocket è chiusa)

La connessione è considerata chiusa quando la connessione TCP sottostante è chiusa.

7.1.5 The WebSocket Connection Close Code (Codice di chiusura della connessione WebSocket)

Il codice di stato incluso nel frame Close.

7.1.6 The WebSocket Connection Close Reason (Motivo di chiusura della connessione WebSocket)

Il motivo testuale opzionale nel frame Close.

7.1.7 Fail the WebSocket Connection (Fallimento della connessione WebSocket)

Chiudere immediatamente la connessione a causa di un errore, senza inviare un frame Close.

7.2 Abnormal Closures (Chiusure anomale)

7.2.1 Client-Initiated Closure (Chiusura avviata dal client)

Quando il client rileva un errore, dovrebbe chiudere la connessione.

7.2.2 Server-Initiated Closure (Chiusura avviata dal server)

Quando il server rileva un errore, dovrebbe chiudere la connessione.

7.2.3 Recovering from Abnormal Closure (Recupero da chiusura anomala)

Le applicazioni dovrebbero implementare meccanismi di riconnessione.

7.3 Normal Closure of Connections (Chiusura normale delle connessioni)

Processo di chiusura normale:

  1. L'iniziatore invia un frame Close
  2. Il ricevitore invia una risposta di frame Close dopo aver ricevuto il frame Close
  3. Il ricevitore chiude la connessione TCP
  4. L'iniziatore chiude anche la connessione TCP dopo aver ricevuto il frame Close
// Chiusura normale del client
ws.close(1000, 'Normal closure');

// Gestione lato server
ws.on('close', (code, reason) => {
console.log(`Connessione chiusa: ${code} - ${reason}`);
});

7.4 Status Codes (Codici di stato)

7.4.1 Defined Status Codes (Codici di stato definiti)

CodiceNomeDescrizione
1000Normal ClosureChiusura normale
1001Going AwayEndpoint in partenza (ad es., navigazione di pagina)
1002Protocol ErrorErrore di protocollo
1003Unsupported DataTipo di dati non supportato
1005No Status RcvdRiservato, non dovrebbe essere usato nel frame Close
1006Abnormal ClosureRiservato, indica chiusura di connessione anomala
1007Invalid frame payload dataDati di payload del frame non validi (ad es., UTF-8 non valido)
1008Policy ViolationViolazione della policy
1009Message Too BigMessaggio troppo grande
1010Mandatory Ext.Estensione prevista dal client non negoziata
1011Internal ErrorErrore interno del server
1015TLS handshakeFallimento handshake TLS (riservato)

7.4.2 Reserved Status Code Ranges (Intervalli di codici di stato riservati)

  • 0-999: Non utilizzato
  • 1000-2999: Definito dal protocollo
  • 3000-3999: Uso libreria/framework
  • 4000-4999: Uso applicazione

Struttura del frame Close

+--------+--------+------------------+
| Status | Reason |
| Code | (opzionale) |
| (2 byte)| (testo UTF-8) |
+--------+--------+------------------+