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" 用法;看到扭曲
有关正确用法的详细信息的服务文档。
尝试连接工厂时,我希望它在失败时定期尝试重新连接。我用这样的代码试了一下:
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" 用法;看到扭曲 有关正确用法的详细信息的服务文档。