2012-07-18 18 views
5

TLDR: ¿Existe un código reutilizable para volver a conectarse automáticamente a un servidor TCP que a veces falla?Reconexión automática a un host TCP


Estoy escribiendo una aplicación de servidor - llamarlo hal - que también abre algunas conexiones TCP a otros servidores - entre ellos xbmc. Lo había escrito originalmente para que cuando xbmc fallara, el proceso de erlang xbmc se detendría y posteriormente sería reiniciado por su supervisor.

Aparentemente, esta no es una buena manera de hacer conexiones TCP persistentes en erlang. En primer lugar, realmente no funciona: cuando xbmc fallaba, los procesos se reiniciaban demasiado rápido, y el supervisor cerraba todo el programa hal. En segundo lugar, aparentemente no debo usar el supervisor para esto: Erlang Supervisor Strategy For Restarting Connections to Downed Hosts (Según lo leí, esta pregunta vinculada solo responde "¿el supervisor resuelve esto?", Y no es un duplicado de mi pregunta)

Estoy pensando que esto suena como un caso de uso razonablemente común, manteniendo una conexión TCP tan conectada como sea posible, incluso con un host que se apaga de vez en cuando. ¿Hay alguna OTP u otro código de biblioteca que deba usar para lograr esto?

Respuesta

3

No, no hay nada en OTP que haga esto por usted.

Yo diría que dado el número de veces que he escrito esto, ya es hora de que se escriba una biblioteca de gestión de conexión decente. Particularmente, uno que considera un historial reciente de intentos de conexión y resultados, puede recibir una dirección de punto final (nombre de host y puerto) y usar varias direcciones devueltas desde la búsqueda del nombre de host para realizar failover rápido para puntos finales que tienen múltiples destinos.

+0

Gracias. No siempre es fácil responder "no" :) Para su próximo proyecto de código abierto, propongo hacer este administrador de conexión: D –

+0

Da la casualidad, ahora estoy escribiendo más o menos. Actualizaré mi respuesta si/cuando se publique. – archaelus

Cuestiones relacionadas