Python - Twisted 客户端 - 检查 ping 循环中的 protocol.transport 连接
Python - Twisted client - check protocol.transport connection in ping loop
我正在使用 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)
但是在断开我的网络后任何变量值都没有改变:(
我的问题是:连接丢失时会设置哪些变量?我的意思是如何检查连接状态,如果断开连接,我该如何重新连接?
重写 connectionLost
方法以捕获断开连接。
to official docs
关于重新连接的编辑:
重新连接主要是一个合乎逻辑的决定。您可能想在 'connectionLost' 和 'reconnect' 之间添加逻辑。
无论如何,
您可以使用 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)
我正在使用 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)
但是在断开我的网络后任何变量值都没有改变:(
我的问题是:连接丢失时会设置哪些变量?我的意思是如何检查连接状态,如果断开连接,我该如何重新连接?
重写 connectionLost
方法以捕获断开连接。
to official docs
关于重新连接的编辑: 重新连接主要是一个合乎逻辑的决定。您可能想在 'connectionLost' 和 'reconnect' 之间添加逻辑。
无论如何, 您可以使用 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)