2017-10-03 9 views
0

J'ai un serveur qui envoie à mon client l'adresse d'un serveur de sauvegarde en cas de panne. Côté serveur, le serveur de sauvegarde est en cours d'exécution. Du côté client une fois la connexion est perdue, je ne suis pas en mesure de faire le client pour se connecter au serveur de sauvegarde. Je sais que je dois ajouter la logique de connexion à la fonction de rappel suivante dans twisted.internet.protcol.ProtocolSe reconnecter à une adresse différente dans tordu?

class MyProtocol(Protocol): 
    def connectionLost(self, reason): 
     print 'Connection Lost' 
     print 'Trying to reconnect' 
     # How do I reconnect to another address say at localhost:8001 

f = Factory() 
f.protocol = MyProtocol 
reactor.connectTCP("localhost", 8000, f) 
reactor.run() 

Si le serveur sur localhost:8000 arrêté il déclenche la méthode connectionLost(..). Dans cette méthode, je veux mettre la logique pour se connecter à l'hôte de sauvegarde qui, dans ce cas, est dit localhost:8001, mais pourrait être quelque chose d'arbitraire. Comment faire cela?

Edit: Je veux faire cela sans l'aide ReconnectingClientFactory

+0

double possible de [Twisted: connexion ReconnectingClientFactory à différents serveurs] (https://stackoverflow.com/questions/14255289/twisted- reconnexionclientfactory-connection-to-different-servers) –

Répondre

1
class MyProtocol(Protocol): 
    def connectionLost(self, reason): 
     print 'Connection Lost' 
     print 'Trying to reconnect' 
     reactor.connectTCP(
      "localhost", 8001, Factory.forProtocol(MyProtocol), 
     ) 

reactor.connectTCP("localhost", 8000, Factory.forProtocol(MyProtocol)) 
reactor.run() 
+0

Cela ne semble pas fonctionner, je cours un nouveau serveur dans un shell de commande dans Windows sur le port 8001. Si je ferme le serveur principal fonctionnant sur le port 8000, je vois la sortie ' Essayer de se reconnecter », puis le code client se termine. Cependant si je change manuellement le port de 8000 à 8001 dans le 'reactor.connectTCP (...)' qui est en dehors de la classe 'MyProtocol', alors je peux me connecter à ce serveur. Je peux donc vérifier que le serveur continue à fonctionner mais que je ne peux pas me connecter à la déconnexion. –

+1

** DÉSOLÉ! Mon erreur **, juste après 'reactor.connectTCP (...)' il y avait un 'reactor.stop()' dans 'clientConnectionLost()'. Cela peut provoquer l'arrêt du réacteur avant qu'il ne puisse se connecter. ** La solution fonctionne **. –