Python网络编程Twisted框架学习(二)、reactor,protocol,factory

Twisted是一个码量很大的一个框架,不够轻盈。

  学习Twisted或者说学习怎么使用Twisted,必须知道reactor,protocol,factoroy的含义。

  •   reactor是管理twisted框架的核心。所有的事件都会触发reactor,然后他会开启服务,初始化factory,factory再初始化protocol。常用的有run()、stop()、callLater。如下最简单的程序:
from twisted.internet import reactor
def hello():
    print('test')
if __name__=='__main__':
    reactor.callWhenRunning(hello)
    reactor.run()

reactor会一直执行,callWhenRunning意味着将hello函数注册了,当运行时回调。开始运行时执行hello,然后继续循环等待事件发生。

  •   factory 在twisted框架中负责连接,通信时建立连接,以及连接中断的处理。如下最简单的客户端的例子:
from twisted.internet import reactor,protocol
class TestProtocol(protocol.Protocol):
    def connectionMade(self):
        print('连接完成后会自动调用')
class TestFactory(protocol.ClientFactory):
    protocol=TestProtocol
    def clientConnectionFailed(self,connector,reason):
        print('连接失败后调用')
        reactor.stop()
    def clientConnectionLost(self,connector,reason):
        print('失去连接后调用')
        reactor.stop()
if __name__=='__main__':
    reactor.connectTCP('localhost',51234,TestFactory())
    reactor.run()

当调用connectTCP的时候初始化TestFactory,没有实际得开始连接,当执行run()的时候开始连接,连接完成会自动调用connectionMade,没有连接上(比如端口没开放)会调用连接失败函数,丢失连接会自动调用丢失函数。所以说factory主要控制连接,初始化协议(执行会话所需的协议)。

  •    Protocol负责会话,数据的传输。比如我们可以重载datarecv、lineRec eived等函数,就可以在收到信息的时候处理。如下程序,是简单服务器重载lineReceived:
from twisted.internet import reactor,protocol
from twisted.protocols import basic
class Echo(basic.LineReceiver):
    def lineReceived(self,line):
        if line=='quit':
            print('退出')
            self.sendLine('baibai')
            self.transport.loseConnection()
        else:
            print('返回信息')
            self.sendLine('You said: '+line)
class EchoFactory(protocol.ServerFactory):
    protocol=Echo
if __name__=="__main__":
    port=5001
    reactor.listenTCP(port,EchoFactory())
    reactor.run()

运行后,接收到端口来的信息后line后处理,这是最简单的echo服务器。
这个程序在本机上出了点问题,没运行出来。

在这里插入图片描述reactor回调模型



下面是这几天学习Twisted的一些资源:

https://blog.csdn.net/bluehawksky/article/details/79814577有关于回调的一些图解

http://blog.sina.com.cn/s/blog_704b6af70100py9n.html twisted书籍章节,基于github的一个诗歌项目

https://www.cnblogs.com/zhangjing0502/archive/2012/05/17/2506687.html
对protrocl,factory,reactor的讲解非常详细

http://blog.sina.com.cn/s/blog_704b6af70100py9n.html六十多页百度文库最详细的讲解,由浅入深

发布了50 篇原创文章 · 获赞 67 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41033366/article/details/104198718
今日推荐