Search code examples
pythonclienttwistedreactor

Restarting a Twisted-python Reactor after an unsuccessful connection


I am writing a server with multiple clients. When a client starts, the server may not yet be working. So a reactor.connectTCP may fail (no receiving end). Currently I'm solving this by looping on a reactor.run, i.e.:

  1. connect to server
  2. reactor.run
  3. if fails, repeat

I understand this is not the way to do it in twisted. How can I do it then?


Solution

  • You can always try to reconnect within your connectionLost handler, for example:

    from twisted.internet.protocol import ClientFactory
    
    class EchoClientFactory(ClientFactory):
        def clientConnectionLost(self, connector, reason):
            connector.connect()
    

    There is also even a built-in ReconnectingClientFactory. See also: this blurb on reconnection.