2013-12-20 4 views
1

Я пишу прокси-сервер tcp с Twisted framework и нуждаюсь в простом отказе при отказе клиента. Если прокси не может подключиться к одному серверу, подключитесь к следующему в списке. Я использовал reactor.connectTCP(host, port, factory) для прокси-сервера, пока не пришел к этой задаче, но он не выплюнул ошибку, если он не может подключиться. Как я могу поймать, что он не может подключиться и попробовать другой хост, или я должен использовать какой-либо другой метод подключения?Python-скрученный клиентский отказ при отказе

+0

Извините, наконец, нашел ответ: http://stackoverflow.com/questions/14255289/twisted-reconnectingclientfactory-connection-to-different-servers –

ответ

0

Вы можете использовать отложенный, чтобы сделать это

class MyClientFactory(ClientFactory): 

    protocol = ClientProtocol 

    def __init__(self, request): 
     self.request = request 
     self.deferred = defer.Deferred() 

    def handleReply(self, command, reply): 
     # Handle the reply 
     self.deferred.callback(0) 

    def clientConnectionFailed(self, connector, reason): 
     self.deferred.errback(reason) 

def send(_, host, port, msg): 
    factory = MyClientFactory(msg) 
    reactor.connectTCP(host, port, factory) 
    return factory.deferred 

d = Deferred() 
d.addErrback(send, host1, port1, msg1) 
d.addErrback(send, host2, port2, msg2) 
# ... 
d.addBoth(lambda _: print "finished") 

Это вызовет следующий errback если первые один сбой, в противном случае Гота функция печати.

Смежные вопросы