我是Twisted的新手。假设我正在编写一个通过TCP连接到服务器的客户端,我想知道Protocol中定义的connectionLost与Factory中定义的clientConnectionLost有什么区别。例如,考虑以下连接到回显服务器的回显客户端:

from twisted.internet import reactor, protocol

class EchoClient(protocol.Protocol):
    def connectionMade(self):
        self.transport.write("Hello, World!")

    def connectionLost(self,reason):
        print "connectionLost called "

    def dataReceived(self,data):
        print "Server said: ", data

class EchoFactory(protocol.ClientFactory):
    def buildProtocol(self, addr):
        return EchoClient()

    def clientConnectionFailed(self, connector, reason):
        print "Connection failed"
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print "clientConnectionLost called"
        reactor.stop()


reactor.connectTCP("localhost",8000,EchoFactory())
reactor.run()


当我终止回显服务器程序时,将同时显示“ connectionLost被调用”和“ clientConnectionLost被调用”。那么两者之间有什么区别?

谢谢

最佳答案

如果您使用的是connectTCP,则这些API大致相同。主要区别是一个ClientFactory可能处理多个连接。

但是,不应在应用程序中使用connectTCP。这是一个低级API,在Twisted的历史上,到现在为止,它主要用于内部实现机制而不是应用程序。相反,采用Endpoints API,如果使用IStreamClientEndpoint,则将仅使用IFactory,而不使用ClientFactory,因此代码中将没有多余的clientConnectionFailedclientConnectionLost方法。

关于python - Twisted中connectionLost和clientConnectionLost之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32439371/

10-10 14:00