Question

Impossible de trouver quoi que ce soit à ce sujet.

Je détiens une application serveur TCP de Windows C que je veux mettre à jour de temps à autre.


Comme vous le comprenez évidemment ce un problème introduit - le serveur doit être 24/7 du point de vue des utilisateurs
. Lors de la mise à jour, il est également souhaitable de maintenir les connexions TCP en cours avec les utilisateurs.


J'ai pensé à un système module comme par exemple le si module de gestion prise résiderait à « sockets.dll », la logique du serveur résiderait dans « logic.dll ».
Objectif de cette approche semble comme la boîte de Pandore ouverture;
 - Comment vais-je faire de la « permutation » réelle des modules? Imaginez que les threads de travail X continuent d'envoyer des données d'un module à un autre - quand j'échange aurai besoin d'un (léger et rapide) façon de arrêter / mettre en pause les; signaux peut-être?
 - signature Protocol version, ou même des fonctions pourrait changer lorsque la mise à jour. Comment gérer cela?
 -. D'autres problèmes tels que les bugs logiques inaperçues
 -. Qui sait genre d'autres questions surgiront


Outre ce qui précède, je crains comme comment puis-je mettre à jour par exemple 10 serveurs? Je veux dire, ils sont tous reliés les uns aux autres, la communication.
Si la mise à jour introduit une modification du protocole, il pourrait causer d'énormes problèmes, et dans ce cas je vais devoir mettre à jour l'ensemble du cluster (des serveurs) dans son ensemble; d'arrêt l'opération? Cela ne semble pas juste, du tout! Comment je fais ça? Quel concept (s) suis-je manque ici et comment puis-je l'apprends / elles?


Est-ce que je peux faire à ce sujet?
Qu'est-ce que tu ferais? Avez-vous fait une telle chose?
Connaissez-vous un mécanisme / article / projet / source exemple / etc » qui permet de résoudre le problème?

Un conseil précieux est très appriciated !!

Était-ce utile?

La solution

En ce qui concerne les changements de protocole, je vous recommande la version de votre protocole. Au début d'une connexion entre les serveurs participants, ont soit l'initiateur ou le récepteur (ne pas vraiment d'importance, je pense) annoncer la nouvelle version du protocole qu'il comprend, et puis l'autre répond côté en nature. Ils se replient vers la nouvelle version, ils deux comprendre.

Oui, cela signifie la maintenance du code pour les deux versions de protocole pour un certain temps, mais vous pouvez prendre sa retraite l'ancien code une fois que vous savez tous de vos serveurs sont mis à jour et de travailler avec le nouveau protocole.

En supposant que vous avez le contrôle sur tous les logiciels clients possible, ainsi, vous pouvez faire la même chose avec vos clients. Bien sûr, cela peut entraîner le maintien de l'ancien code de protocole plus, si vous n'avez pas le contrôle lorsque les utilisateurs mise à niveau.

Autres conseils

Voici une idée:

  • Mise à jour des téléchargements Old version et commence il.
  • arrête Ancienne version d'accepter de nouvelles connexions en les transférant à la version mise à jour (qui écoute sur un autre port).
  • se ferme Old version vers le bas quand il se termine par ses connexions.
  • New Détecte version quand ancienne version démissions et ports commutateurs.

En fait, l'idée est d'avoir les deux versions en cours d'exécution en même temps.

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