SignalR: détecter l'état de connexion sur le client
Question
J'ai vu comment vous pouvez piéger un événement de déconnexion du côté client avec SignalR en se liant à l'événement .disconnect.
Maintenant que je l'ai fait, je veux mettre le client en « attente de cycle de Reconnect » où il essaie toujours de se connecter jusqu'à ce qu'il réussisse ou que l'utilisateur annule. Le centre expose une propriété d'état de connexion? Je pense quelque chose comme (pseudo code)
var isConnected;
function onConnected() { isConnected = true; }
hub.disconnect = function() { while(hub.notconnected) { connect(); }
La solution
Les tentatives de client JS de reprendre contact pendant une certaine période de temps, ce qui par défaut à 110 secondes. Vous pouvez vous abonner à l'événement connection.stateChanged, et obtenir des mises à jour sur le moment où l'état change de sorte que vous pouvez l'afficher à l'utilisateur ou la réponse validate SignalR à différents scénarios de déconnexion.
Dans mes tests, l'état a été correctement mis à jour déconnecté et reconnectant etc., comme on peut s'y attendre.
Plus d'informations sur signalr connexions
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 });
Autres conseils
Le client essaie toujours de se connecter. Vous ne devez pas vous inquiéter à ce sujet. Il y a un événement reconnecté que vous pouvez écouter, si vous voulez faire quelque chose lorsque la connexion est rétablie avec succès.
EDIT: Cela a changé, le client essaie seulement de se reconnecter pendant une certaine période de temps. Après cela, vous devez attraper l'événement de déconnexion et redémarrer manuellement.