Python扭曲的连续重新连接尝试

时间:2018-07-31 22:47:11

标签: python-3.x twisted

尝试连接工厂时,我希望它定期尝试重新连接(如果连接失败)。我用看起来像这样的代码尝试过:

def reconnect():
    print("this sucks")
    reactor.connectTCP("localhost", 6667, factory2)

factory2 = pb.PBClientFactory()
factory2.clientConnectionFailed(reconnect(), "reasons")
reactor.connectTCP("localhost", 6667, factory2)

如果我运行这段代码,尽管再次调用了以factory2作为参数的connectTCP方法,但它仅打印一次“ thisss”。我应该如何实施所需的行为?

1 个答案:

答案 0 :(得分:0)

clientConnectionFailed是一种在连接尝试失败时在工厂上被Twisted 称为的方法。您的示例中的用法是荒谬的。

有关一种解决方案,请参见ReconnectingClientFactory

from twisted.internet.protocol import ReconnectingClientFactory
from twisted.internet import reactor

from yourlib import YourProtocol

factory = ReconnectingClientFactory()
factory.protocol = YourProtocol

reactor.connectTCP(host, port, factory)
reactor.run()

但是,由于使用自定义工厂类来支持PB,因此这与PB结合不好。这只是根本不使用PB的众多原因之一。

最近引入的解决方案是ClientService

from twisted.application.internet import ClientService
from twisted.internet.endpoints import HostnameEndpoint

from yourlib import YourFactory

factory = YourFactory()

service = ClientService(
    HostnameEndpoint(reactor, host, port),
    YourFactory(),
)
service.startService()
reactor.run()

请注意,为简洁起见,我在这里跳过了正确的“服务”用法;看到扭曲 服务文档,以获取有关正确用法的详细信息。