Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Tengo un sistema cliente-servidor, ambos lados escritos por mí, y me gustaría poner a los clientes en un estado 'fuera de línea' cuando el servidor se desconecta / muere, y luego automáticamente volverlos a 'conectar' cuando el servidor está disponible nuevamente.

Para la primera parte, escucho los eventos con errores del canal y lo manejo configurando el cliente como fuera de línea. Luego empiezo a llamar a un servicio 'ping' en el servidor (cada 30 segundos) que solo devuelve un bool si está vivo. Una vez que está vivo, el cliente obtiene el bool y vuelve a conectarse.

Todo esto funciona, el problema que tengo es que cuando el cliente llama al servicio de ping y el servidor está inactivo, no se envía respuesta (obviamente) y, finalmente, después de aproximadamente 2 minutos obtengo una excepción de punto final no encontrado. En este momento ya he probado 3-4 pings más y, por lo tanto, tengo 3-4 excepciones preparándose.

Mi pregunta es, ¿cómo puedo manejar el servicio de ping con más gracia? Idealmente, me gustaría llamar periódicamente a un servicio que me avise si está en línea, e instantáneamente me avisará si no lo está.

¿Fue útil?

Solución

¿Qué pasa con esto?

  • si detecta una desconexión del servidor, ingrese un " Ping " modo
  • en el " modo ping " ;, configura el " sendTimeout " del cliente a algo muy corto, p. ej. algo así como 2 segundos más o menos, ya que su llamada al método Ping del servicio debe responderse casi de inmediato
  • una vez que tu " Ping " funcionó correctamente, vuelve a crear el proxy del cliente y establece el "envío de tiempo de espera" del cliente volver al valor original (el valor predeterminado es 1 minuto, depende de lo que tenga sentido para usted, 15 segundos, 30 segundos, lo que sea)

De esa manera, si está en el modo Ping, obtiene sus respuestas (o tiempos de espera) rápidamente y puede detectar la disponibilidad del servicio rápidamente.

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