前言:

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

开胃图:

这是一个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  行的结束符。默认为'\r\n'。
 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,谢谢!

python-twisted系列(1)的更多相关文章

  1. Python Twisted系列教程3:初步认识Twisted

    作者:dave@http://krondo.com/our-eye-beams-begin-to-twist/ 译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 用twisted的方式实现前 ...

  2. Python Twisted系列教程1:Twisted理论基础

    作者:dave@http://krondo.com/in-which-we-begin-at-the-beginning/  译者:杨晓伟(采用意译) 前言: 最近有人在Twisted邮件列表中提出诸 ...

  3. Python Twisted系列教程21: Twisted和Haskell

    作者:dave@http://krondo.com/twisted-and-haskell/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted ...

  4. Python Twisted系列教程20: Twisted和Erlang

    作者:dave@http://krondo.com/twisted-and-erlang/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入 ...

  5. Python Twisted系列教程17:造”回调”的另一种方法

    作者:dave@http://krondo.com/just-another-way-to-spell-callback/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅 ...

  6. Python Twisted系列教程15:测试诗歌

    作者:dave@http://krondo.com/tested-poetry/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览 ...

  7. Python Twisted系列教程12:改进诗歌下载服务器

    作者:dave@http://krondo.com/a-poetry-transformation-server/  译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 新的服务器实现 这里我们 ...

  8. Python Twisted系列教程9:第二个小插曲,Deferred

    作者:dave@http://krondo.com/a-second-interlude-deferred/ 译者:杨晓伟(采用意译) 可以从这里从头来阅读这个系列 更多关于回调的知识 稍微停下来再思 ...

  9. Python Twisted系列教程8:使用Deferred的诗歌下载客户端

    作者:dave@http://krondo.com/deferred-poetry/  译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 客户端4.0 我们已经对deferreds有些理解了 ...

  10. Python Twisted系列教程7:小插曲,Deferred

    作者:dave@http://krondo.com/an-interlude-deferred/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列 回调函数的后序发展 在第六部分我们认识这 ...

随机推荐

  1. [C#]MemoryStream.Dispose之后,为什么仍可以ToArray()?

    目录 概述 MemoryStream分析 总结 概述 事件起因,一哥们在群里面贴出了类似下面这样的一段代码: class Program { static void Main(string[] arg ...

  2. Bootstrap3.0学习第二十四轮(JavaScript插件——按钮)

    详情请查看 http://aehyok.com/Blog/Detail/30.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:h ...

  3. 第一个windows程序设计

    #include <windows.h> int WINAPI WinMain(HINSTANCE hinstabce, HINSTANCE prvhinstace, PSTR icmdL ...

  4. cygwin 的不同文件类型显示不同的颜色

    正常情况下,我们的cygwin安装好之后,不管是文件还是文件夹显示的颜色都是一样的,这样在我们平时的工作中很不方便 所以这里记录一下怎么设置成彩色的,其实很简单. 直接修改文件 .bashrc vim ...

  5. simple-LDAP-auth / ldap_auth.php

    <?php /** * simple class for LDAP authentification * Copyright (C) 2013 Petr Palas This program i ...

  6. Java设计模式-代理模式(Proxy)

    其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你 ...

  7. 【转】pageX、clientX、screenX、offsetX、layerX、x

    参考:http://www.cnblogs.com/xesam/archive/2011/12/08/2280509.html chrome: e.pageX——相对整个页面的坐标e.layerX—— ...

  8. 【SDOI2009】解题汇总

    又开了波专题,感觉就和炉石开冒险一样...(说的好像我有金币开冒险似的) /---------------------------------------------/ BZOJ-1226 [SDOI ...

  9. bzoj1069 SCOI2007 最大土地面积

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2560  Solved: 983 Description ...

  10. Mysql安全配置

    相关学习资料 http://drops.wooyun.org/tips/2245 http://www.cnblogs.com/siqi/archive/2012/11/21/2780966.html ...