zoukankan      html  css  js  c++  java
  • python-twisted系列(1)

    前言:

    这不是一个入门教程。而是知识点的梳理。

    开胃图:

    这是一个TCP server的“交互图”。

    reactor

    它是Twisted事件处理的核心。包括一些处理网络通讯,线程和事件分派的接口。

    一旦调用了其run方法,reactor就会一直监听事件,直到被终止(调用stop/crash,或者ctrl+c)

    这个类比较重要。重要方法:

    接口 方法 说明
    IReactorCore         resolve 返回一个deffered对象用于解析主机名
    run 触发'startup'系统事件,修改reactor的状态为'running',然后运行主事件循环(直到调用stop或者crash)
    stop 触发'shutdown'系统事件,修改reactor状态为'stopped',并使得reactor.run()退出。
    crash 立即停止主事件循环而不出发任何事件。可能会丢数据。这个方式比较粗鲁。
    iterate 运行main loop的i/o轮询函数一会儿。(使用小心)
    fireSystemEvent 触发系统事件。比较常见的有'startup','shutdown','persist'
    addSystemEventTrigger 添加系统事件的处理函数。
    removeSystemEventTrigger 移除系统时间的处理函数。参数是上面函数的返回值。
    callWhenRunning reactor运行时调用某个函数。
    IReactorTCP  listenTCP 将某个协议的factory实例绑定到某个端口
    connectTCP 连接TCP客户端
    IReactorSSL  listenSSL 将某个协议的factory实例绑定到某个TCP/IP端口,使用ssl链接。
    connectSSL 将客户端协议连接到远程的SSL套接字
     IReactorUDP listenUDP 将给定的报文协议连接到指定的UDP端口。
     IReactorSocket   adoptStreamPort 将已存在的处于监听状态的SOCK_STREAM类型的套接字添加到reactor中以监控新的连接然后接受并处理他们。
    adoptStreamConnection  将已经存在的连接上了的SOCK_STREAM类型的套接字添加到reactor中以检测数据。
    adoptDatagramPort 将已存在的处于监听状态的SOCK_DGRAM类型的套接字添加到reactor中以监控来为读写做好准备。
     

    Factory

    切确的说,它取名不太好,应该叫做FactoryOfProtocals,即协议工厂(也就是工厂模式),用来产生协议实例的。

    Factory并不知道连接,它可能绑定多个host的多个端口。通常用来做数据的获取/保存等操作。

    重要方法:

      名称 备注
    属性 protocal 类。具体的协议类,定义了这个就不用重写buildProtocal方法了。
    方法     doStart 确保startFactory被调用。用户不应该调用!!
    doStop 确保stopFactory被调用。用户不应该调用!!
    startFactory 在监听端口或者Connector之前会被调用。仅被调用一次,哪怕工厂绑定到多个端口。因此适于做一些用户自定义的事情,比如链接数据库,打开文件等等。
    stopFactory 在所有端口/Connector结束监听之前会被调用。在这里做上面的擦屁股的事情,比如关闭数据库连接,关闭文件等等。
    buildProtocol 创建协议的实例。
     
    附赠三哥的一份理解,在这里。 
     

    Protocal

    定义:Twisted的Protocol用异步的方式处理数据。当网络事件到达时,protocol会调用其方法来响应这些事件。每一个连接都会有一个Protocol与之对应。

    命名空间:twisted.internet.protocol.Protocol

    父类:BaseProtocol

    BaseProtocol
      名称 备注
    方法  makeConnection 为指定的server的transport对象产生连接。
    connectionMade 当连接产生时被调用的方法。
     
    Protocol
      名称 备注
    方法 dataReceived 收到数据时会被调用的方法
    connectionLost 连接关闭时会被调用的方法
     
    LineReceiver
      名称 备注
     属性   delimiter  行的结束符。默认为' '。
     MAX_LENGTH  行的最大字符数,默认为16384。
    方法  clearLineBuffer  清除缓存数据。
     dataReceived  
     setLineMode  设置接收器的行的模式。
     setRawMode  设置接收器的原始模式。之后接收的数据将被发给rawDataReceived函数而不是lineReceived。
     rawDataReceived  原始数据接收处理函数。
     lineReceived  按行发送的数据的处理 函数。
     sendLine  向连接的另外一端发送一行数据。
     lineLengthExceeded  行的最大字符数达到时的处理函数。

    继承方法

         
     logPrefix  
     connectionLost 连接断开时的处理函数。
     makeConnection 为指定的server的transport对象产生连接。
     connectionMade 当连接产生时被调用的方法。
     pauseProducing  
     resumeProducing  
     stopProducing  
     

    默认实现了的协议:

    amp

    socks- v4

    ftp

    sip

    postfix

    telnet

     转载请注明来自:http://www.cnblogs.com/Tommy-Yu/p/4092383.html,谢谢!

  • 相关阅读:
    javascript时钟代码
    JavaScript继承 类变量(静态变量)和实例变量
    JavaScript闭包
    javascript经典特效(二)
    得到windows mobile 应用程序的路径
    windows mobile datagrid 样式
    windows mobile 日期问题
    json 字符串反序列化成DataSet
    遇到的错误,以及解决方法
    “xxxx”的重载均与委托“System.Threading.WaitCallback”不匹配
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4092383.html
Copyright © 2011-2022 走看看