Ciclo di vita ed errori della connessione
Gestisca gli eventi open, close ed error.
Ciclo di vita ed errori della connessione è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 4 lezioni in totale.
L'intero ciclo di vita
Un socket attraversa gli stati CONNECTING → OPEN → CLOSING → CLOSED. Quattro eventi corrispondono a queste transizioni: open, message, error e close.
L'evento onclose
onclose viene generato quando la connessione termina, normalmente o in modo imprevisto. L'evento contiene code, reason e wasClean.
socket.onclose = (event) => {
console.log("Closed", event.code, event.reason, event.wasClean);
};Codici di chiusura
Tra i codici standard figurano 1000 (normale), 1001 (in uscita), 1006 (anomalo, senza frame di chiusura) e 1011 (errore del server). I codici da 4000 a 4999 sono definiti dall'applicazione.
socket.onclose = (e) => {
if (e.code === 1000) console.log("normal close");
else console.log("unexpected", e.code);
};Chiudere deliberatamente
socket.close(code, reason) avvia un arresto regolare. Utilizzi 1000 per una chiusura normale; la stringa del motivo deve essere inferiore a 123 byte.
socket.close(1000, "user logged out");L'evento onerror
onerror viene generato in caso di errore. Per motivi di sicurezza, l'evento di errore contiene intenzionalmente poche informazioni: non include un motivo dettagliato. Quasi sempre segue un evento close.
socket.onerror = (event) => {
console.log("Socket error — a close will follow");
};Distinguere una chiusura regolare da una anomala
event.wasClean è true solo quando entrambe le parti si sono scambiate frame di chiusura. Un'interruzione della rete produce wasClean: false e il codice 1006.
socket.onclose = (e) => {
if (!e.wasClean) console.log("Connection dropped unexpectedly");
};Liberare le risorse
Alla chiusura, cancelli i timer (per gli heartbeat), rifiuti le richieste in attesa e aggiorni lo stato dell'interfaccia, così l'applicazione riflette la disconnessione.
socket.onclose = () => {
clearInterval(heartbeatTimer);
pending.forEach((reject) => reject(new Error("disconnected")));
pending.clear();
};Rimuovere i listener
Se ha associato i gestori con addEventListener, li rimuova alla chiusura per evitare perdite di memoria, soprattutto quando ricrea i socket.
function cleanup() {
socket.removeEventListener("message", onMessage);
socket.removeEventListener("close", onClose);
}readyState durante l'arresto
Tra la chiamata a close() e l'evento onclose, readyState è CLOSING (2). Gli invii effettuati durante questo intervallo vengono ignorati.
socket.close();
console.log(socket.readyState); // 2 (CLOSING)Timeout di inattività imposti dai server
I server e i proxy spesso chiudono le connessioni inattive dopo 30–60 secondi. Gli heartbeat mantengono attiva la connessione e consentono di rilevare rapidamente le interruzioni.
Rilevare una connessione interrotta
Combini gli heartbeat con un watchdog: se non arriva alcun pong entro un determinato intervallo, consideri il socket interrotto e lo chiuda per avviare la riconnessione.
let pongTimer;
function ping() {
socket.send(JSON.stringify({ type: "ping" }));
pongTimer = setTimeout(() => socket.close(4000, "no pong"), 5000);
}
socket.onmessage = (e) => {
if (JSON.parse(e.data).type === "pong") clearTimeout(pongTimer);
};Verifica rapida
Verifichi la gestione del ciclo di vita.
Riepilogo: ciclo di vita ed errori
Ha gestito onclose con i relativi code/reason/wasClean, imparato a conoscere i codici di chiusura standard, chiuso deliberatamente le connessioni, gestito l'evento onerror con le sue informazioni limitate, liberato timer e listener e creato un watchdog basato sugli heartbeat. Ora: le strategie di riconnessione.
Domande Frequenti
La lezione «Ciclo di vita ed errori della connessione» è gratuita?
Sì — il testo completo di «Ciclo di vita ed errori della connessione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 4 lezioni in totale.
Cosa imparerò in «Ciclo di vita ed errori della connessione»?
Gestisca gli eventi open, close ed error. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare JavaScript Academy?
Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Ciclo di vita ed errori della connessione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?
Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Aprire una connessione WebSocket
- Inviare e ricevere messaggi
- Ciclo di vita ed errori della connessione
- Strategie di riconnessione