web-dev-qa-db-fra.com

Comment utiliser les événements SignalR pour maintenir la connexion vivante de la bonne manière?

Je développe une application client-serveur en temps réel utilisant SignalR, ASP.NET et C #. J'utilise localhost comme hôte et VS2013.

Mes questions sont:

  1. Pourquoi si je proche serveur, sur le client Web le "Se reconnecter"l'événement se produit?

  2. L'événement "Disconnect" se produit après 40+ secondes seulement. Comment réduire ce temps?

  3. J'ai besoin que le client se connecte au serveur au démarrage. L'événement "Reconnecter" doit se produire dans intervalle fixe seulement. Si l'intervalle de temps "Reconnecter" est terminé, le client doit se connecter en tant que nouveau client. Comment archiver cet objectif?

Enfin, je voudrais demander - comment rester en vie connexion utilisant SignalR de la manière à droite?

J'utilise ce code:

C #

public override Task OnDisconnected()
{
clientList.RemoveAt(nIndex);
Console.WriteLine("Disconnected {0}\n", Context.ConnectionId);
return (base.OnDisconnected());
}

public override Task OnReconnected()
{
Console.WriteLine("Reconnected {0}\n", Context.ConnectionId);
return (base.OnReconnected());
}

Javascript

$.connection.hub.reconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();

// Add the message to the page.
$('#discussion').append('Reconnected to server: ' + now + '</br>');
});

$.connection.hub.disconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Disconnected from server: ' + now + '</br>');
});

Après la sortie Connect:

message received from server : Fri Feb 21 2014 10:53:02

Après la sortie de Close Server:

Reconnected to server: Fri Feb 21 2014 10:53:22 <-- Why, if i close server ???
Disconnected from server: Fri Feb 21 2014 10:53:53 <-- Why 40+ seconds after the server is closed ?
19
Dmitry Kazakov

1. Après avoir proche serveur, sur le client Web le "Se reconnecter"l'événement se produit et le"Déconnecter"l'événement ne se produit qu'après. Pourquoi?

SignalR ne peut pas faire la différence entre la fermeture du serveur et le redémarrage du serveur. Pour cette raison, lorsque le serveur s'arrête, le client commence à essayer de se reconnecter au cas où le serveur redémarrerait réellement.

2. La "déconnexion" se produit 30+ secondes après inconnu de "Reconnecter". Comment réduire ce temps?

Ce délai d'expiration de 30 secondes peut être modifié via la propriété DisconnectTimeout .

3. J'ai besoin que le client se connecte au serveur au démarrage. La "reconnexion" devrait se produire dans intervalle fixe seulement. Si l'intervalle "Reconnecter" est terminé, le client doit se connecter en tant que nouveau client.

Vous devez démarrer la connexion sur l'événement déconnecté , de préférence après un délai d'expiration pour réduire la charge du serveur en cas de redémarrage.

$.connection.hub.disconnected(function() {
    setTimeout(function() {
        $.connection.hub.start();
    }, 5000); // Re-start connection after 5 seconds
});

L'article nderstanding and Handling Connection Lifetime Events in SignalR tout entier est probablement pertinent pour votre question.

29
halter73