2017-10-09 17 views
2

J'essaie de créer une conversation simple avec websockets. J'affiche également les utilisateurs actifs actuels dans le chat, et voici où les problèmes commencent: nous utilisons une ferme Web. Un utilisateur peut se connecter via un serveur loadbalancer à un serveur. Lorsqu'une nouvelle connexion rencontre un serveur, elle augmente un compteur dans un SQL database et notifie les autres serveurs de la batterie via rabbit MQ.Connexions actives sur la batterie de serveurs Web

Tous les autres serveurs récupèrent les nouvelles données et les renvoient à leurs utilisateurs connectés.

Si un utilisateur se déconnecte, la même chose se produira: Le serveur diminue le compteur dans la base de données SQL et rabbit MQ tous les autres serveurs le savent.

Mais, que se passera-t-il lorsqu'un serveur meurt? par exemple, Si 10 utilisateurs seront connectés à ce serveur. Lorsque ce serveur tombe en panne, tous les utilisateurs sont déconnectés, mais cela n'est plus mis à jour dans la base de données.

Quelle est la meilleure solution pour obtenir le nombre total d'utilisateurs actifs dans une ferme Web? Et notifier les utilisateurs lorsque ce montant a changé?

Merci d'avance!

Oh BTW, nous utilisons signalr

Répondre

1

Je pense que la façon typique de traiter avec des noeuds déconnecter de manière asynchrone à partir d'un maillage est de mettre en place un mécanisme de battement de coeur/keep-alive. Dans ce cas, le message de pulsation se situe entre les serveurs et il doit également exister un enregistrement accessible indiquant les utilisateurs connectés à quel serveur. Lorsqu'un serveur ne produit pas de pulsation pendant un certain temps, tous les autres serveurs peuvent mettre à jour leurs enregistrements et marquer comme déconnectés tous les utilisateurs associés au serveur.

Il semble que vous ayez quelques options pour garder une trace des utilisateurs (base de données SQL ou chaque serveur écoute un message Rabbit MQ). En ce qui concerne le rythme cardiaque, vous pouvez l'implémenter vous-même ou essayer de voir si la méthode de détection du laodalanceur peut être utilisée.