尝试连接工厂时,我希望它定期尝试重新连接(如果连接失败)。我用看起来像这样的代码尝试过:
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”。我应该如何实施所需的行为?
答案 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()
请注意,为简洁起见,我在这里跳过了正确的“服务”用法;看到扭曲 服务文档,以获取有关正确用法的详细信息。