我正在使用Twisted创建TCP客户端套接字。我需要在connectionMade方法的循环间隔中检查连接状态。
from twisted.internet import reactor, protocol
class ClientProtocol(protocol.Protocol):
def connectionMade(self):
while not thread_obj.stopped.wait(10):
print ('ping')
self.transport.write(b'test') # Byte value
对于检查连接丢失,我手动断开我的网络我之后检查了一些变量如下:
print (self.connected)
print (self.transport.connector.state)
print (self.transport.connected)
print (self.transport.reactor.running)
print (self.transport.socket._closed)
print (self.factory.protocol.connected)
print (self._writeDissconnected)
但断开网络连接后,任何变量值都没有变化:(
我的问题是:连接丢失时会设置哪些变量?我的意思是我如何检查连接状态以及它是否断开连接,我该如何重新连接?
答案 0 :(得分:1)
覆盖connectionLost
方法以捕获断开连接。
to official docs
关于重新连接的编辑: 重新连接主要是一个合乎逻辑的决定。您可能希望在' connectionLost'之间添加逻辑。和'重新连接'。
反正 您可以使用ReconnectingClientFactory来获得更好的代码。 ps:在重新连接时使用工厂模式是保持代码清洁和智能的最佳方法。
class MyEchoClient(Protocol):
def dataReceived(self, data):
someFuncProcessingData(data)
self.transport.write(b'test')
class MyEchoClientFactory(ReconnectingClientFactory):
def buildProtocol(self, addr):
print 'Connected.'
return MyEchoClient()
def clientConnectionLost(self, connector, reason):
print 'Lost connection. Reason:', reason
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
def clientConnectionFailed(self, connector, reason):
print 'Connection failed. Reason:', reason
ReconnectingClientFactory.clientConnectionFailed(self, connector,
reason)