[Twisted-Python] client connecting to 2 servers (non simultaneously)
Jason Rennie
jrennie at gmail.com
Tue Jan 11 11:50:00 MST 2011
I agree that rotate(-1) is more intuitive. I barely gave it any
thought---almost forgot to include an argument for rotate as I initially
incorrectly assumed no argument would do something like rotate(-1) :-)
Jason
On Tue, Jan 11, 2011 at 1:36 PM, Kevin Horn <kevin.horn at gmail.com> wrote:
> Using a deque for this is a fantastic idea, though I would have used
> rotate(-1), as your example looks like it rotate's "backwards" to me.
>
> Matter of taste I suppose. It doesn't make much actual difference.
>
> Kevin Horn
>
>
> On Tue, Jan 11, 2011 at 7:11 AM, Jason Rennie <jrennie at gmail.com> wrote:
>
>> You could probably generalize and simplify by using a collections.deque of
>> hosts/ports and using the rotate() method before each reactor.connectTCP.
>> Also, no need for multiple reactor imports---one at the top of the code is
>> fine. Note that if the connection is "lost" in a non-clean fashion, you may
>> also want to reconnect. IIUC, "fail" only handles the case that no
>> connection is made (protocol is never created).
>>
>> import collections
>> from twisted.internet import reactor
>>
>> class MyClientFactory(object):
>> protocol = MyClientProtocol
>> def __init__(self, hosts):
>> self.hosts = collections.deque(hosts)
>> reactor.callWhenRunning(reactor.connectTCP, self.hosts[0][0],
>> self.hosts[0][1], self)
>> self.hosts.rotate(1)
>> def clientConnectionFailed(self, connector, reason):
>> reactor.callLater(2.0, connectTCP, self.hosts[0][0],
>> self.hosts[0][1], self)
>> self.hosts.rotate(1)
>>
>> factory = MyClientFactory([('host1', port1), ('host2', port2), ...])
>> reactor.run()
>>
>> Cheers,
>>
>> Jason
>>
>> On Tue, Jan 11, 2011 at 5:17 AM, <benjamin.bertrand at lfv.se> wrote:
>>
>>> Hi,
>>>
>>> I'm new to twisted and I have started to write a new protocol with a TCP
>>> client and server.
>>> In my protocol, a client should be able to connect to 2 servers
>>> (master/slave node - only the master accepts connection).
>>> The client should try to connect to server1. If it fails, try to connect
>>> to server2 (after a specific timeout). If that fails, try server1...
>>> I came up with a solution (see below).
>>> As I'm new to twisted and I haven't seen anything like that in the
>>> examples, I'd like to check if that's a proper way to do it.
>>> Any comments is welcome.
>>>
>>> Thanks
>>>
>>> Benjamin
>>>
>>> ***********************************************
>>> class MyClientFactory(ClientFactory):
>>>
>>> protocol = MyClientProtocol
>>>
>>> def __init__(self, host2=None):
>>> self.host1 = None
>>> self.host2 = host2
>>>
>>> def clientConnectionFailed(self, connector, reason):
>>> from twisted.internet import reactor
>>> if self.host2 is None:
>>> # host2 is not defined, reconnect to host1
>>> reactor.callLater(2.0, connector.connect)
>>> else:
>>> destination = connector.getDestination()
>>> if self.host1 is None:
>>> # First connection failed, initialize host1, and try
>>> host2
>>> self.host1 = destination.host
>>> host = self.host2
>>> elif destination.host == self.host1:
>>> # Connection to host1 failed, try host2
>>> host = self.host2
>>> else:
>>> # Connection to host2 failed, try host1
>>> host = self.host1
>>> reactor.callLater(2.0, reactor.connectTCP, host,
>>> destination.port, self)
>>>
>>>
>>> factory = MyClientFactory(server2)
>>> from twisted.internet import reactor
>>> reactor.connectTCP(server1, 8010, factory)
>>> reactor.run()
>>> ***********************************************
>>>
>>>
>>> _______________________________________________
>>> Twisted-Python mailing list
>>> Twisted-Python at twistedmatrix.com
>>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>>
>>
>>
>>
>> --
>> Jason Rennie
>> Research Scientist, ITA Software
>> 617-714-2645
>> http://www.itasoftware.com/
>>
>>
>> _______________________________________________
>> Twisted-Python mailing list
>> Twisted-Python at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
--
Jason Rennie
Research Scientist, ITA Software
617-714-2645
http://www.itasoftware.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20110111/771b3ed2/attachment.html>
More information about the Twisted-Python
mailing list