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六十多页百度文库最详细的讲解,由浅入深

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值