[Twisted-Python] stop/start client connections with loseConnection in ReconnectingClientFactory

Chris Withers chris at withers.org
Tue Mar 26 01:28:26 MDT 2019


On 22/03/2019 23:26, Chris Satterthwaite wrote:
> Hi Chris,
> 
> The files I attached (with the full classes) made it through to my email, but I wondered if they would they go through to everyone.
> 
> Here's a gist with the same scripts:
> https://gist.github.com/codingadvocate/f732da79ddf6cef4b7a0b6b3679f519f
> 
> And yep, as you mentioned, a 'sleep' is definitely blocking.  That's not in the production version; I just dropped it in here for the test script to simulate something.

Observations:

- Your super call at 
https://gist.github.com/codingadvocate/f732da79ddf6cef4b7a0b6b3679f519f#file-testclient-py-L46, 
I'd expect that to be super(ServiceClientFactory, self).__init__(), but 
your spelling may be a python 3 only thing that works?

- Those sleeps are going to cause you more problems than they solve.

- What does this seek to achieve? 
https://gist.github.com/codingadvocate/f732da79ddf6cef4b7a0b6b3679f519f#file-testclient-py-L88-L89

- Why not use twisted logging instead of print? By setting it to debug, 
you'll get lots of into about what twisted is doing, and by using 
logging you won't need to do all that manual traceback printing.

- when you say "When the client hits a problem, it calls 
transport.loseConnection()", where is that call to transport.loseConnection?

- when you noticed some Twisted source code that works off 
factory.numPorts, where is that code? Can you provide a link? This 
doesn't sound right...

Now, as to what your problem is, I suspect it's this call to stopTrying:
https://gist.github.com/codingadvocate/f732da79ddf6cef4b7a0b6b3679f519f#file-testclient-py-L87

The factory is stopped and started again by ReconnectingClientFactory, 
so you don't want that there as it means you stop trying every time 
there's a disconnection.

cheers,

Chris




More information about the Twisted-Python mailing list