Pregunta

Estoy tratando de encontrar una buena manera de detectar una pérdida de conexión.

Mi adaptador se implementa como una aplicación Fix :: basada en uno de los ejemplos. Utiliza un iniciador de socket para conectarse a la puerta de enlace de reparación.

Cuando desconecto Internet, el método de inicio de sesión de Fix :: Application tarda unos 30 segundos en activarse. Parece que alguna clase subyacente sería consciente de que hay un problema con el socket mucho antes. ¿Hay alguna forma rápida de enganchar esto?

¿Fue útil?

Solución

La mejor manera de resolver esto probablemente sería disminuir su intervalo de latidos para que lo sepa antes. No conozco ningún mensaje que dispare por una pérdida de conexión TCP, pero tampoco creo que QuickFix esté escuchando eventos del sistema operativo. Aunque, probablemente fluiría a través del evento fromAdmin si hubiera tal mensaje.

¿Publicó su pregunta en QuickFix DL?

Otros consejos

Es posible que el motor de arreglos que está utilizando no devuelva la llamada cuando TCP está desconectado, o vuelve a llamar en algo que no sea en Cerrar sesión. Dado que está utilizando la solución, supongo que obliga a cerrar la sesión debido a latidos perdidos.

Una forma rápida sería mirar el código y verificar dónde se maneja el cierre del socket y qué ruta se ejecuta cuando esto sucede.

TCP en sí viene con un mecanismo de latido nativo llamado SO_KEEPALIVE . El problema es que el intervalo predeterminado para este latido puede ser de hasta 2 horas. Esto se configura a nivel del sistema operativo. Entonces, en teoría, puede activar SO_KEEPALIVE, configurar un intervalo razonable de latidos en el nivel del sistema operativo y ser feliz. Sin embargo, como se dice que esto depende mucho del sistema operativo, la mayoría de las aplicaciones eligen implementar latidos a nivel de aplicación, y FIX no es una excepción. Disminuir el intervalo de latidos FIX es el camino a seguir aquí, especialmente si confía en cancelar al desconectar y segundos adicionales de pérdida de conexión no detectada pueden conducir a ejecuciones de órdenes no deseadas. Una puerta de enlace FIX implementada en la parte superior de cualquier motor de reparación debe admitir la configuración de latido fuera de la caja. Eche un vistazo a CoralGateway para ver un ejemplo. (Descargo de responsabilidad: soy uno de los desarrolladores de CoralGateway)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top