2009-02-13 15 views
7

Estoy buscando detectar la pérdida de conexión local. ¿Hay un medio para hacer eso, como con los eventos en los componentes de Corelabs?Datasnap: ¿Hay alguna manera de detectar la pérdida de conexión globalmente?

Gracias

EDIT: Lo sentimos, voy a tratar de ser más específicos: Actualmente estoy diseñando un prototipo utilizando DataSnap 2009. Así que tengo un cliente ligero, una aplicación de servidor sin estado y un servidor de base de datos.

Lo que podría hacer es detectar y manejar la pérdida de conexión (conexión a internet) entre el cliente y la aplicación del servidor para manejarlo adecuadamente, es decir: mostrar un mensaje de error informativo al usuario o detectar un apagado del servidor para redirigir silenciosamente en otro servidor de aplicaciones.

En 2 niveles solía administrar eso con componentes ODAC, TOraSession tiene algunos eventos para manejar estos problemas.

Respuesta

4

Normalmente no se activa ningún evento cuando se rompe una conexión, a menos que se active una instrucción en la base de datos. Esto se debe a que no hay forma de saber una pérdida de conexión a menos que haya algún tipo de ping activo activo.

Muchos marcos comprueban si una conexión es válida haciendo una consulta muy pequeña contra el servidor. Podría estar recibiendo el tiempo de un servidor. Especialmente en un entorno de agrupación de conexiones.

Puede implementar una función de comprobación de conexión en su aplicación en algunos de los eventos de la base de datos (¿antes de ejecutar?). O crea un temporizador que comprueba cada 10 segundos.

+0

no estoy seguro que no hay forma de detectar la conexión pérdida, porque la pérdida de conexión del zócalo subyacente puede ser detectable. Sin embargo, es cierto que la mayoría de las bibliotecas no tienen ningún evento para ello. – mghie

1

Genera un hilo en el cliente que periódicamente envía algunos comandos RPC 'Ping' o 'Heartbeat' al servidor.

  • si esto falla, el cliente sabe que algo le pasó a la conexión

  • si el servidor no escucha al cliente más de un período de tiempo (por ejemplo, dos veces el intervalo de latidos del corazón), se se puede concluir que el cliente está desconectado, sin embargo, esto requiere un servidor de estado (y su diseño no tiene estado por lo que requeriría el procesamiento de eventos en un sistema secundario, lo que podría ser alimentado a través de una cola de mensajes)

Cuestiones relacionadas