Una vez que su cliente se ha conectado a un servidor, en ocasiones la conexión puede cerrarse por mala señal, errores de conexión, etc. Hay 2 propiedades que ayudan a mantener la conexión activa.
HeartBeat permite enviar un Ping cada X segundos para mantener la conexión activa. Algunos servidores cierran las conexiones TCP si no se intercambian datos entre los pares. HeartBeat resuelve este problema enviando un ping a un intervalo específico. Normalmente esto es suficiente para mantener una conexión activa, pero puede establecer un intervalo TimeOut si desea cerrar la conexión cuando no se recibe una respuesta del servidor tras X segundos.
Ejemplo: enviar un ping cada 30 segundos
oClient := TsgcWebSocketClient.Create(nil);
oClient.HeartBeat.Interval := 30;
oClient.HeartBeat.Timeout := 0;
oClient.HeartBeat.Enabled := true;
oClient.Active := true;
Existe un evento llamado OnBeforeHeartBeat que permite personalizar el comportamiento de HeartBeat. De forma predeterminada, si HeartBeat está habilitado, el cliente enviará un ping WebSocket cada X segundos según lo establecido por la propiedad HeartBeat.Interval.
OnBeforeHeartBeat tiene un parámetro llamado Handled, que por defecto es false, lo que significa que el flujo es controlado por el componente TsgcWebSocketClient. Si establece el valor en True, no se enviará ping y podrá enviar su mensaje personalizado usando la clase Connection.
Si WatchDog está habilitado, cuando el cliente detecta una desconexión, WatchDog intenta reconectarse cada X segundos hasta que la conexión vuelva a estar activa.
Ejemplo: reconexión cada 10 segundos tras una desconexión con intentos ilimitados.
oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
oClient.WatchDog.Enabled := true;
oClient.Active := true;
Puede usar el evento OnBeforeWatchDog para cambiar el servidor al que el cliente intentará conectarse. Ejemplo: tras 3 reintentos, si el cliente no puede conectarse a un servidor, intentará conectarse a un servidor secundario.
La propiedad Handled, si se establece en True, significa que el cliente no intentará reconectarse.