TsgcWebSocketClient | Disconnessioni interrotte

Una volta stabilita la connessione, se nessun peer invia dati, non vengono inviati pacchetti in rete. TCP è un protocollo passivo, quindi presuppone che la connessione sia ancora attiva.

Motivi di disconnessione

 

Rilevare disconnessioni Half-Open

È possibile provare a rilevare le disconnessioni utilizzando i seguenti metodi

Seconda connessione

È possibile tentare di aprire una seconda connessione e provare a connettersi, ma ciò presenta alcuni svantaggi: si consumano più risorse, si creano nuovi thread, ecc. Inoltre, se l'altro peer ha riavviato, la seconda connessione funzionerà ma la prima no.

Ping all'altro peer

Se si tenta di inviare un ping o qualsiasi altro messaggio con una connessione half-open, si noterà che non viene ricevuto alcun errore.

 

Abilita KeepAlive a livello di socket TCP

Un pacchetto TCP keep-alive è semplicemente un ACK con il numero di sequenza impostato a uno in meno rispetto al numero di sequenza corrente per la connessione. Un host che riceve uno di questi ACK risponde con un ACK per il numero di sequenza corrente. I keep-alive possono essere utilizzati per verificare che il computer all'estremità remota di una connessione sia ancora disponibile. I TCP keep-alive possono essere inviati ogni TCPKeepAlive.Time (predefinito 7.200.000 millisecondi o due ore) se non sono stati trasmessi altri dati o keep-alive di livello superiore sulla connessione TCP. Se non vi è risposta a un keep-alive, viene ripetuto ogni TCPKeepAlive.Interval secondi. KeepAliveInterval è predefinito a 1000 millisecondi.

 

È possibile abilitare KeepAlive per connessione e consentire al protocollo TCP di verificare se la connessione è attiva o meno. Questo è il metodo preferito se si desidera rilevare disconnessioni improvvise (ad esempio: quando si scollega un cavo di rete).

 


oClient := TsgcWebSocketClient.Create(nil);
oClient.TCPKeepAlive.Enabled := True;
oClient.TCPKeepAlive.Time := 5000;
oClient.TCPKeepAlive.Interval := 1000;