Comment construire des serveurs Twisted qui sont capables de faire échange de code à chaud en Python?

StackOverflow https://stackoverflow.com/questions/4864380

  •  27-10-2019
  •  | 
  •  

Question

J'ai développé un ensemble de serveur de streaming audio, tous utilisent Twisted, et ils sont en Python, bien sûr. Ils travaillent, mais un problème ne cesse de me troubler, quand j'ai trouvé quelques bugs là dans le serveur en cours d'exécution, ou je veux quelque chose ajouter dans le serveur, je dois les arrêter et commencer. Contrairement aux serveurs HTTP, il est correct de les redémarrer à chaque fois, mais pas d'accord avec les serveurs de streaming audio. Une fois que je redémarre mon serveur de streaming, cela signifie que mes utilisateurs vont rencontrer une déconnexion.

J'ai essayé d'installer un trou d'homme (un service ssh pour les serveurs Twisted, vous pouvez vous connecter et tapez le code Python dans la console pour faire quelque chose), et se connecter à la console, reload modules Python à la volée. Cela fonctionne parfois, mais difficile à contrôler. Vous ne savez jamais combien de cas de l'ancienne classe sont là dans le serveur, et certains d'entre eux peuvent être difficiles à atteindre, et les relations de la classe serait très complexe. En outre, il peut travaux dans certaines situations, mais parfois vous avez vraiment besoin de serveur redémarrer, par exemple, vous utilisez le serveur avec réacteur de sélection, et que vous voulez l'exécuter au lieu de epoll réacteur, alors vous devez redémarrer. Un autre exemple, lorsque l'utilisation de la mémoire va trop élevée, il faut les remettre en marche, aussi.

Pour construire ce système, j'ai une idée vient dans ma tête, je pense que possible à la main sur les connexions et les données d'un processus à l'autre. Par exemple:

Nous avons un serveur nommé Broadcasting, et l'instance en cours d'exécution est sous rev.123, et nous voulons le remplacer par rev.124.

Broadcasting rev.123 is running....
Startup Broadcasting rev.124 ....
Broadcasting rev.124 is stand by
Hand over connections from instance of rev.123 to instance of rev.124
Stop Broadcasting rev. 123 instance

Est-ce possible? Je ne sais pas qui fait la vie des poignées de socket lié aux processus ou non, je pensais que les sockets créées par un processus seront fermés lorsque le processus créateur est tué, mais je ne suis pas sûr. S'il est possible, y at-il des lignes directrices ou des articles pour la conception de ce type de mécanisme d'échange de code à chaud? Et est-il quelque chose peut obtenir ce que je veux pour Twisted être déjà fait?

Merci.

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