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
| 名称 | 备注 | |
| 方法 | makeConnection | 为指定的server的transport对象产生连接。 |
| connectionMade | 当连接产生时被调用的方法。 |
| 名称 | 备注 | |
| 方法 | dataReceived | 收到数据时会被调用的方法 |
| connectionLost | 连接关闭时会被调用的方法 |
| 名称 | 备注 | |
| 属性 | 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)的更多相关文章
- Python Twisted系列教程3:初步认识Twisted
作者:dave@http://krondo.com/our-eye-beams-begin-to-twist/ 译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 用twisted的方式实现前 ...
- Python Twisted系列教程1:Twisted理论基础
作者:dave@http://krondo.com/in-which-we-begin-at-the-beginning/ 译者:杨晓伟(采用意译) 前言: 最近有人在Twisted邮件列表中提出诸 ...
- Python Twisted系列教程21: Twisted和Haskell
作者:dave@http://krondo.com/twisted-and-haskell/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted ...
- Python Twisted系列教程20: Twisted和Erlang
作者:dave@http://krondo.com/twisted-and-erlang/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入 ...
- Python Twisted系列教程17:造”回调”的另一种方法
作者:dave@http://krondo.com/just-another-way-to-spell-callback/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅 ...
- Python Twisted系列教程15:测试诗歌
作者:dave@http://krondo.com/tested-poetry/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览 ...
- Python Twisted系列教程12:改进诗歌下载服务器
作者:dave@http://krondo.com/a-poetry-transformation-server/ 译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 新的服务器实现 这里我们 ...
- Python Twisted系列教程9:第二个小插曲,Deferred
作者:dave@http://krondo.com/a-second-interlude-deferred/ 译者:杨晓伟(采用意译) 可以从这里从头来阅读这个系列 更多关于回调的知识 稍微停下来再思 ...
- Python Twisted系列教程8:使用Deferred的诗歌下载客户端
作者:dave@http://krondo.com/deferred-poetry/ 译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 客户端4.0 我们已经对deferreds有些理解了 ...
- Python Twisted系列教程7:小插曲,Deferred
作者:dave@http://krondo.com/an-interlude-deferred/ 译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列 回调函数的后序发展 在第六部分我们认识这 ...
随机推荐
- javascript去掉字符串前后空格
使用场景 当我们进行一些页面编辑时,字符串前后的空格,通常是无效的.因此需要在获取信息时,进行过滤. 比如: 输入:[空格][空格]a[空格]b[空格][空格][空格] 得到:a[空格]b 代码如下: ...
- VS快速格式化代码
Ctrl+E,D快速对所有文档进行格式化 Ctrl+E,F快速对选中内容进行格式化
- Spring aop的实现原理
简介 前段时间写的java设计模式--代理模式,最近在看Spring Aop的时候,觉得于代理模式应该有密切的联系,于是决定了解下Spring Aop的实现原理. 说起AOP就不得不说下OOP了,OO ...
- Java基础-常量池
在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...
- Java算法-hash算法
Hash ,一般翻译做“ 散列” ,也有直接音译为“ 哈希” 的,就是把任意长度的输入(又叫做预映射, pre-image ),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩 ...
- Python装饰器笔记
DRY(Don't Repeat Yourself)原则: 一般是指在写代码的时候尽量避免重复的实现.违反DRY原则导致的坏处很容易理解,例如维护困难,修改时一旦遗漏就会产生不易察觉的问题. 一.函数 ...
- BZOJ-2929 洞穴攀岩 最大流Dinic(傻逼题)
竟然没有1A真羞耻...1分钟不到读完题,10分钟不到打完....MD没仔细看...WA了一遍,贱! 2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec Memory Limi ...
- 【poj1740】 A New Stone Game
http://poj.org/problem?id=1740 (题目链接) 男人八题之一 题意 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该 ...
- BZOJ4241 历史研究
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- POJ1002 487-3279
Description 企业喜欢用容易被记住的电话号码.让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语.例如,你需要给滑铁卢大学打电话时,可以拨打TUT-GLOP.有时,只将电话号 ...