Una volta che il client si è connesso a un server, la connessione può talvolta essere chiusa a causa di segnale debole, errori di connessione, ecc. Esistono 2 proprietà che aiutano a mantenere la connessione attiva.
HeartBeat consente di inviare un Ping ogni X secondi per mantenere attiva la connessione. Alcuni server chiudono le connessioni TCP se non vengono scambiati dati tra i peer. HeartBeat risolve questo problema inviando un ping a un intervallo specifico. Di solito questo è sufficiente per mantenere attiva una connessione, ma è possibile impostare un intervallo di TimeOut per chiudere la connessione quando una risposta dal server non viene ricevuta dopo X secondi.
Esempio: inviare un ping ogni 30 secondi
oClient := TsgcWebSocketClient.Create(nil);
oClient.HeartBeat.Interval := 30;
oClient.HeartBeat.Timeout := 0;
oClient.HeartBeat.Enabled := true;
oClient.Active := true;
È disponibile un evento denominato OnBeforeHeartBeat che consente di personalizzare il comportamento di HeartBeat. Per impostazione predefinita, se HeartBeat è abilitato, il client invierà un ping WebSocket ogni X secondi come impostato dalla proprietà HeartBeat.Interval.
OnBeforeHeartBeat ha un parametro chiamato Handled, per impostazione predefinita è false, il che significa che il flusso è controllato dal componente TsgcWebSocketClient. Se si imposta il valore su True, il ping non verrà inviato ed è possibile inviare un messaggio personalizzato utilizzando la classe Connection.
Se WatchDog è abilitato, quando il client rileva una disconnessione, WatchDog tenta di riconnettersi ogni X secondi finché la connessione non è nuovamente attiva.
Esempio: riconnessione ogni 10 secondi dopo una disconnessione con tentativi illimitati.
oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
oClient.WatchDog.Enabled := true;
oClient.Active := true;
È possibile utilizzare l'evento OnBeforeWatchDog per cambiare il server a cui il client tenterà di connettersi. Esempio: dopo 3 tentativi, se il client non riesce a connettersi a un server, tenterà di connettersi a un server secondario.
La proprietà Handled, se impostata su True, significa che il client non tenterà di riconnettersi.