在尝试连接工厂时,如果连接失败,我希望它定期尝试重新连接。我用如下所示的代码尝试:
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方法。我应该如何着手实现所需的行为?
发布于 2018-08-01 08:25:14
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()
注意:为了简洁起见,我在这里跳过了正确的" service“用法;有关正确用法的详细信息,请参阅Twisted服务文档。
https://stackoverflow.com/questions/51623134
复制相似问题