Twisted初探之Tcp连接

今天接触到异步编程框架Twisted,先来一个简单的tcp连接代码
from twisted.internet import reactor,protocol

class EasyDisconnect(protocol.Protocol):

    def connectionMade(self):

        print "Connected to %s."%self.transport.getPeer().host

        self.transport.loseConnection()

class DemoClientFactory(protocol.ClientFactory):

    protocol=EasyDisconnect

    def clientConnectionLost(self,connector,reason):

        print 'Lost connection: %s'%reason.getErrorMessage()

        reactor.stop()

    def clientConnectionFailed(self,connector,reason):

        print 'Connection failed: %s'%reason.getErrorMessage()

        reactor.stop()

reactor.connectTCP('www.baidu.com',80,DemoClientFactory())

reactor.run()
  如果连接成功,会返回以下信息
Connected to 180.149.131.205.
Lost connection: Connection was closed cleanly.
  这里有两个主要的类用于作为客户端工作,ClientFactory和Protocol。这些类被设计成处理连接中所有可能运到的事件:成功建立连接、连接失败、连接断开、数据传送等等。 ClientFactory和Protocol有严格的不同。ClientFactory的工作是管理连接事件,并且创建Protocol对象处理每一个成功的连接。一旦连接建立,Protocol对象就接管下面的工作了,包括收发数据和决定是否关闭连接。 Tip:名字"Factory"在ClientFactory是来自于Protocol的请求,响应每一个成功的连接。 代码中定义了自定义的Protocol叫做EasyDisconnect,继承自protocol.Protocol。它重载了一个方法connectionMade。这个方法连接成功时运行,在reactor刚刚成功建立了连接,然后ClientFactory创建了EasyDisconnect的实例。EasyDisconnect对象在打印信息之后就马上关闭。 Protocol对象有一个属性叫做transport,包含了当前活动连接对象。 DemoClientFactory是继承自protocol.ClientFactory的类,它首先设置了类变量protocol为EasyDisconnect。这个类的实例被创建用于管理成功的连接。 DemoClientFactory重载了ClientFactory的两个方法,clientConnectionLost和clientConnectionFailed。这两个方法是事件处理器。 clientConnectionFailed在反应器无法建立连接时被调用。 clientConnectionLost在建立的连接被关闭或断开时调用。   告知反应器建立TCP连接,是调用reactor.connectTCP:
reactor.connectTCP('www.baidu.com',80,EasyClientFactory())
  这一行告知反应器建立一个TCP连接到服务器www.baidu.com的80端口,通过EasyClientFactory来管理连接。
热门标签