Question

    

Cette question a déjà une réponse ici:

         

J'ai un système client-serveur, écrit des deux côtés, et je souhaite mettre les clients dans un état "hors connexion" lorsque le serveur se déconnecte / meurt, puis les remet automatiquement en ligne lorsque le serveur est à nouveau disponible.

Pour la première partie, j'écoute les événements survenus sur le canal et les gère en définissant le client en mode hors connexion. Je commence alors à appeler un service 'ping' sur le serveur (toutes les 30 secondes), qui renvoie simplement une valeur booléenne s'il est actif. Une fois en vie, le client récupère le booléen et repasse en ligne.

Tout fonctionne, le problème que je rencontre est que, lorsque le client appelle le service de ping et que le serveur est en panne, aucune réponse n'est envoyée (évidemment) et finalement, au bout d'environ 2 minutes, j'obtiens une exception relative au point final introuvable. À ce stade, j’ai déjà essayé 3 ou 4 pings de plus et ai donc 3 ou 4 exceptions en préparation.

Ma question est la suivante: comment puis-je gérer le service de ping de manière plus élégante? Idéalement, j'aimerais appeler périodiquement un service qui me permet de savoir s'il est en ligne et qui me permet de savoir immédiatement si ce n'est pas le cas.

Était-ce utile?

La solution

Qu'en est-il de cela:

  • si vous détectez une déconnexion du serveur, entrez un "Ping". mode
  • dans le "mode ping", vous définissez le paramètre "sendTimeout" du client. à quelque chose de très court, par exemple quelque chose comme 2 secondes ou plus, puisque votre appel à la méthode Ping du service doit recevoir une réponse presque immédiatement
  • une fois votre " Ping " Si vous avez travaillé avec succès, vous créez à nouveau le proxy client et définissez le paramètre "sendTimeout" du client. retour à la valeur d'origine (la valeur par défaut est 1 minute; cela dépend de ce qui est logique pour vous, 15 secondes, 30 secondes, peu importe)

Ainsi, si vous êtes en "mode Ping", vos réponses (ou vos délais d'expiration) sont détectés rapidement et vous pouvez détecter rapidement la disponibilité du service.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top