我创建了与这样的服务器的连接:
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()回调中设置一个标志是一个选项,但我想知道我是否可以避免这样做。
答案 0 :(得分:6)
扭曲尝试在存储状态时尽可能轻。正如裸工厂绝对没有跟踪他们的孩子一样,Protocols
对自己知之甚少。它们主要是回调袋。
在connectionLost()
方法中设置标志是这样做的方法。供将来参考:
from twisted.internet.protocol import Protocol
class StatefulProtocol(Protocol):
def __init__(self, factory):
self.connected = False
def connectionMade(self):
self.connected = True
def connectionLost(self, reason):
self.connected = False
修改:请注意,这有一个令人不舒服的原因。如果你有一个方法需要问这个问题,你可能在回调链之外工作。如果您在Protocol
公开的生命周期方法中专门运行代码,则可能不需要此代码。