Pregunta

He visto cómo puedes atrapar un evento de desconexión en el lado del cliente con SignalR vinculando al evento .disconnect.

Ahora que he hecho esto, quiero poner al cliente en una "espera para reconectar el ciclo" donde intenta conectarse continuamente hasta que tenga éxito o el usuario cancele. ¿El HUB expone una propiedad de estado de conexión? Estoy pensando en algo como (pseudo código)

var isConnected;

function onConnected() { isConnected = true; }

hub.disconnect = function() { while(hub.notconnected) { connect(); }
¿Fue útil?

Solución

El cliente JS intenta volver a conectarse durante un cierto período de tiempo, lo que de valor predeterminado tiene 110 segundos. Puede suscribirse al evento Connection.TateChanged y obtener actualizaciones sobre cuándo cambia el estado para que pueda mostrarlo al usuario o validar la respuesta de SignalR a diferentes escenarios de desconexión.

En mis pruebas, el estado se actualizó correctamente para desconectarse y reconectarse, etc., como era de esperar.

Más información sobre las conexiones de SignalR

function connectionStateChanged(state) {
    var stateConversion = {0: 'connecting', 1: 'connected', 2: 'reconnecting', 4: 'disconnected'};
    console.log('SignalR state changed from: ' + stateConversion[state.oldState]
     + ' to: ' + stateConversion[state.newState]);
}

connection = $.connection(signalR_Endpoint);
connection.stateChanged(connectionStateChanged);
connection.start({ waitForPageLoad: false });

Otros consejos

El cliente siempre está tratando de conectarse. No necesitas preocuparte por eso. Hay un evento reconectado que puede escuchar, en caso de que desee hacer algo cuando la conexión se restablezca con éxito.

Editar: Esto cambió, el cliente solo trata de reconectarse durante un cierto período de tiempo. Después de eso, debes atrapar el evento de desconexión y reiniciar manualmente.

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