TsgcWebSocketClient | Desconexiones descartadas

Una vez establecida la conexión, si ningún par envía datos, no se envía ningún paquete por la red. TCP es un protocolo inactivo, por lo que asume que la conexión sigue activa.

Motivos de desconexión

 

Detectar desconexiones semi-abiertas

Puede intentar detectar desconexiones usando los siguientes métodos

Segunda Conexión

Puede intentar abrir una segunda conexión e intentar conectarse, pero esto tiene algunas desventajas: consume más recursos, crea nuevos hilos, etc. Además, si el otro extremo ha reiniciado, la segunda conexión funcionará pero la primera no.

Hacer ping al otro par

Si intenta enviar un ping o cualquier mensaje con una conexión semiabierta, verá que no recibe ningún error.

 

Habilitar KeepAlive a nivel de socket TCP

Un paquete TCP keep-alive es simplemente un ACK con el número de secuencia establecido en uno menos que el número de secuencia actual para la conexión. Un host que recibe uno de estos ACKs responde con un ACK para el número de secuencia actual. Los keep-alives pueden usarse para verificar que el equipo en el extremo remoto de una conexión sigue disponible. Los TCP keep-alives pueden enviarse una vez cada TCPKeepAlive.Time (por defecto 7.200.000 milisegundos o dos horas) si no se han transportado otros datos o keep-alives de nivel superior por la conexión TCP. Si no hay respuesta a un keep-alive, se repite una vez cada TCPKeepAlive.Interval segundos. KeepAliveInterval tiene por defecto 1000 milisegundos.

 

Puede habilitar KeepAlive por conexión y permitir que el protocolo TCP compruebe si la conexión está activa o no. Este es el método preferido si desea detectar desconexiones caídas (por ejemplo: cuando desconecta un cable de red).

 


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