web-dev-qa-db-fra.com

SignalR: détecter l'état de connexion sur le client

J'ai vu comment vous pouvez intercepter un événement de déconnexion côté client avec SignalR en établissant une liaison avec l'événement .disconnect.

Maintenant que j'ai fait cela, je veux mettre le client dans un "cycle d'attente de reconnexion" où il essaie continuellement de se connecter jusqu'à ce qu'il réussisse ou que l'utilisateur annule. Le concentrateur expose-t-il 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(); }
30
Heather

Le client JS tente de se reconnecter pendant une certaine période de temps, qui par défaut est de 110 secondes. Vous pouvez vous abonner à l'événement connection.stateChanged et obtenir des mises à jour lorsque l'état change pour pouvoir l'afficher à l'utilisateur, ou valider la réponse de SignalR à différents scénarios de déconnexion.

Lors de mes tests, l'état a été correctement mis à jour pour se déconnecter et se reconnecter, etc., comme vous vous en doutez.

Plus d'informations sur les connexions 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 });
51
Mazrick

Le client essaie toujours de se connecter. Vous n'avez pas à vous en préoccuper. Il y a un événement reconnecté que vous pouvez écouter, au cas où vous voudriez 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 intercepter l'événement de déconnexion et redémarrer manuellement.

8
nmat