SignalR: rileva lo stato della connessione sul client
Domanda
Ho visto come puoi intercettare un evento di disconnessione sul lato client con SignalR collegandoti all'evento .disconnect.
Ora che l'ho fatto, voglio mettere il client in un "ciclo di attesa per riconnettersi" in cui cerca continuamente di connettersi fino a quando non riesce o l'utente si annulla.L'hub espone una proprietà dello stato di connessione?Sto pensando qualcosa come (pseudo codice)
var isConnected;
function onConnected() { isConnected = true; }
hub.disconnect = function() { while(hub.notconnected) { connect(); }
Soluzione
Il client JS tenta di riconnettersi per un certo periodo di tempo, che per impostazione predefinita è di 110 secondi.Puoi iscriverti all'evento connection.stateChanged e ricevere aggiornamenti su quando lo stato cambia in modo da poterlo visualizzare all'utente o convalidare la risposta di SignalR a diversi scenari di disconnessione.
Durante i miei test, lo stato è stato aggiornato correttamente per disconnesso e riconnessione, ecc., come ci si aspetterebbe.
Ulteriori informazioni su signalrconnessioni
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 });
Altri suggerimenti
Il client cerca sempre di connettersi.Non devi preoccuparti di questo. C'è un evento di riconnessione che puoi ascoltare, nel caso tu voglia fare qualcosa quando la connessione è stata ristabilita con successo.
EDIT: questo è cambiato, il client tenta di riconnettersi solo durante un certo periodo di tempo.Dopodiché, devi rilevare l'evento di disconnessione e riavviare manualmente.