5
我创建这样我连接到服务器:我如何检查是否twisted.internet.protocol实例已经断开
connection = TCP4ClientEndPoint(reactor, server_host, server_port)
factory = Factory()
factory.protocol = Protocol
protocol = yield connection.connect(factory)
protocol.doSomething() # returns a deferred
现在,在一些其他的方法,在这里我有这个协议对象的句柄我想测试协议是否仍然连接,如:
if protocol.isConnected():
doSomethingElse()
有没有什么办法可以做到这一点。我看着扭曲的文档,并找不到相关的方法。在connectionLost()回调中设置一个标志是一个选项,但我想知道是否可以避免这样做。
谢谢!我对扭曲的设计实践不是很熟悉。通过生命周期方法,你的意思是我应该在connectionMade()回调中完成所有工作,并且不需要明确调用类似protocol.doSomething()的东西? – AnkurVj
是的。通过在回调方法中运行所有必要的行为,您可以避免跟踪状态(通常容易出错),因为您只需在需要完成的时候执行操作。请注意,这是**可取的**,但并不总是**可能的**。有些设计只需要像上面这样的标志。尽量避免它,但不要破坏你的代码库,试图按照最佳做法:) – slezica
的确。我发现很难在回调中做到这一切!例如,我必须在连接之后和协议对象做任何事情之前给协议对象一些额外的变量,但不知道该怎么做!我必须执行'protocol.val = val',然后显式调用'protocol.doSomething()'而不是在'connectionMade()'中调用'self.doSomething()'回调 – AnkurVj