2010-07-27 5 views
8

He creado una aplicación Cliente/Servidor con el componente IdTCPServer. Los clientes se conectan y mantienen una conexión persistente durante la vida de la aplicación. Si se interrumpe la conexión de red (lo que ocurre con bastante frecuencia porque los clientes se conectan con tarjetas de aire inalámbricas), el cliente se volverá a conectar automáticamente. Todo esto funciona bienCómo tratar las caídas de red e Indy IdTCPServer

Mi problema es tratar con los sockets en el servidor correspondiente a la conexión perdida. No detectan que la red se desconecte y se desconecte. Después de leer varios artículos relacionados, he aprendido que no hay forma de que el servidor sepa si se eliminó una conexión. Debe esperar algún evento para descubrir esto.

Así que mi pregunta es, ¿debería construir algún mecanismo en mi servidor para "manipular" periódicamente los sockets con conexiones caídas? Y si es así, ¿cómo? Pensé que una de las maneras sería hacer un ciclo a través de todas las conexiones e intentar enviarles datos. Encuentro que esto activará ese "evento" necesario.

Respuesta

6

Algún tipo de señal de latido o ping, enviada de cliente a servidor a intervalos regulares, podría utilizarse para mantener viva la sesión del servidor. Si la señal se detiene y pasa un intervalo de tiempo de espera, el servidor puede suponer que el cliente ha perdido la conexión.

(Si el servidor simplemente utiliza la conexión de socket para enviar datos de vuelta al cliente, el servidor no puede saber si el cliente lo recibió. Los datos podrían estar en algún lugar en el medio.)

+0

buen punto. Tal como está, retengo el último latido para cada conexión. Y podría construir fácilmente en lógica como sugieres. –

+0

+1. Tú también me ayudaste –

Cuestiones relacionadas