Saltar al contenido

Sin conexión

Una aplicación de escritorio se usa en aviones, en trenes y en oficinas con la red caída. Qué debe seguir funcionando, cómo se detecta el estado, y por qué «reintentar» no es una estrategia.

Qué debe seguir funcionando

La tercera fila merece un aviso: si tu arranque valida el testigo contra el servidor y trata un fallo de red como sesión inválida, cada vez que el usuario abra la aplicación sin conexión le pedirás credenciales — que además no puede introducir, porque tampoco hay red. Es un fallo real y frecuente, y se evita distinguiendo «el servidor dice que no» de «no he podido preguntar».

Detectar el estado

Y aquí está la parte contraintuitiva: la mayoría de las formas de detectar conexión mienten.

La conclusión práctica: no consultes el estado, dedúcelo. El estado de conexión de tu aplicación es una consecuencia de cómo van tus peticiones, no un dato que haya que ir a buscar. Y el aviso del sistema sirve para una cosa útil: reintentar antes cuando dice que ha vuelto.

Encolar lo que no se puede hacer

Para lo que el usuario hace y hay que enviar:

  • Aceptar la acción localmente y guardarla en una cola persistente. El usuario ve su cambio hecho; el envío es un detalle de implementación.
  • Reintentar con espera creciente: unos segundos, luego más, hasta un máximo. Reintentar cada segundo con la red caída gasta batería para nada.
  • Y que las acciones sean idempotentes o lleven un identificador único, para que reenviar una que sí llegó no la duplique. Es lo mismo del nivel 44.4.

Y decidir qué pasa si una acción encolada falla definitivamente cuando vuelve la red — porque el servidor la rechaza. Ése es el caso que hay que diseñar y que casi nadie diseña.

Comunicarlo

Tres reglas de trato al usuario:

  • Un indicador discreto y permanente es mejor que un aviso por cada fallo. Una franja pequeña que diga «sin conexión» y desaparezca al volver.
  • No bloquees lo que sí funciona. Un diálogo modal de error de red sobre una aplicación que podría seguir trabajando es la peor respuesta posible.
  • Y distingue «sin conexión» de «el servidor da error», porque el usuario puede hacer algo con lo primero y nada con lo segundo.