Python Twisted 连续重新连接尝试

Python Twisted continuous reconnect attempts

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

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

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

如果我 运行 这段代码它只打印一次 "this sucks" ,尽管再次调用以 factory2 作为参数的 connectTCP 方法。我应该如何着手实施所需的行为?

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

但是,由于使用自定义工厂 class 来支持 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()

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