SignalR: Mantener activa siempre la comunicación


En un anterior entrada describí SignalR. SignalR permite la comunicación fluida entre un navegador Web y un Servidor. En esta entrada vamos describir como proceder cuando se producen errores de conectividad entre el Navegador y el Servidor.

Introducción arquitectura de comunicación en SignalR

Cuando se produce un fallo de conectividad; SignalR intenta restablecer la comunicación en varias ocasiones (Reconexión). Si persiste el fallo; finalmente finaliza la comunicación (Desconexión). Por defecto se realizan 3 reintentos en 30 segundos. El número de reintentos y el tiempo de timeout es configurable (con las propiedades DisconnetTimeout and KeepAlive). SignalR dispone de eventos tanto en la parte cliente como en la servidor. Los eventos de reconexión se producen cuando se restaura la comunicación perdida y los eventos de desconexión cuando se da por finalizada la comunicación.

  • En la parte Servidor:
    • OnReconnected()
    • OnDisconnected()
  • En la parte Cliente:
    • $.connection.hub.reconnected
    • $.connection.hub.disconnected

En este articulo, se explica la más a fondo la arquitectura de comunicación de SignalR.

Problema

Hay ocasiones en que se produce una caída de conectividad durante un largo periodo de tiempo; por ejemplo:

  • Caída de la linea.
  • Reinicio de la Servidor o Servicio Web.
  • Parada programa del Servidor por mantenimiento/actualización.

Estas caídas de conectividad provocarán que se produzca la desconexión. La idea es restablecer la comunicación tan pronto vuelva a estar operativa la conectividad sin necesidad de recargar la pagina.

Solución

La manera para realizarlo es volver a iniciar una nueva conexión en el evento de desconexión. En nuestro caso a los 10 segundos de producirse la desconexión; se intentará restaurarla.

   $.connection.hub.start().done(function() { $("#status").text('Connected'); });
        $.connection.hub.disconnected(function() {
		$("#status").text('Disconnected');
        setTimeout(function() {
                $.connection.hub.start().done(function() {  $("#status").text('Connected'); });
            }, 10000);
        });
Anuncios
Esta entrada fue publicada en SignalR y etiquetada . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s