TsgcWebSocketClient | Manter a conexão do cliente aberta

Uma vez que seu cliente tenha conectado a um servidor, às vezes a conexão pode ser fechada devido a sinal fraco, erros de conexão, etc. Há 2 propriedades que ajudam a manter a conexão ativa.

 

HeartBeat

A propriedade HeartBeat permite que você envie um Ping a cada X segundos para manter a conexão ativa. Alguns servidores fecham conexões TCP se não houver dados trocados entre os peers. O HeartBeat resolve esse problema enviando um ping em um intervalo específico. Geralmente isto é suficiente para manter uma conexão ativa, mas você pode definir um intervalo de TimeOut se quiser fechar a conexão quando uma resposta do servidor não for recebida após X segundos.

 

Exemplo: envia um ping a cada 30 segundos


oClient := TsgcWebSocketClient.Create(nil);
oClient.HeartBeat.Interval := 30;
oClient.HeartBeat.Timeout := 0;
oClient.HeartBeat.Enabled := true;
oClient.Active := true;

Há um evento chamado OnBeforeHeartBeat que permite personalizar o comportamento do HeartBeat. Por padrão, se o HeartBeat estiver habilitado, o cliente enviará um ping WebSocket a cada X segundos, conforme definido pela propriedade HeartBeat.Interval.

OnBeforeHeartBeat tem um parâmetro chamado Handled, por padrão é false, o que significa que o fluxo é controlado pelo componente TsgcWebSocketClient. Se você definir o valor como True, então o ping não será enviado, e você pode enviar sua mensagem personalizada utilizando a classe Connection.

 

WatchDog

Se o WatchDog estiver habilitado, quando o cliente detectar uma desconexão, o WatchDog tenta reconectar a cada X segundos até que a conexão esteja ativa novamente.

 

Exemplo: reconecta a cada 10 segundos após uma desconexão com tentativas ilimitadas.

 


oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
oClient.WatchDog.Enabled := true;
oClient.Active := true;

Você pode utilizar o evento OnBeforeWatchDog para alterar o servidor ao qual o cliente tentará conectar. Exemplo: após 3 tentativas, se o cliente não conseguir conectar a um servidor, ele tentará conectar a um servidor secundário.

A propriedade Handled, se definida como True, significa que o cliente não tentará reconectar.