【问题标题】:Python Twisted continuous reconnect attemptsPython Twisted 连续重新连接尝试
【发布时间】:2018-07-31 22:47:11
【问题描述】:

在尝试连接工厂时,我希望它定期尝试重新连接(如果失败)。我用这样的代码试了一下:

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

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

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

【问题讨论】:

    标签: python-3.x twisted


    【解决方案1】:

    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()
    

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

    【讨论】:

    • 非常感谢您的回答,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多