twisted pb reconnection connectionlost

class Foo(object):

     # ...

     def connect(self):
         factory = FooMgrFactory()
         reactor.connectTCP(host, port, factory)
         return factory.getRootObject().addCallback 
(self._connected).addErrback(
             self._catchFailure)

     def _connected(self, rootObj):
         self.rootObj = rootObj
         rootObj.notifyOnDisconnect(self._disconnected)

     def _disconnected(self, rootObj):
         self.rootObj = None
         self.connected = False
	self.timer = reactor.callLater(defaultTimerDelay, self.connect)

     def doRemoteOp(self):
	try:
	    if self.rootObj: self.rootObj.callRemote("foo", arg).addCallback 
(self.fooreturn)
	    else: self.timer = reactor.callLater(defaultTimerDelay,  
self.connect)

	except pb.DeadReferenceError, e:
	    self.rootObj = None
	    self.timer = reactor.callLater(defaultTimerDelay, self.connect)

分享到: 微信 更多