twisted学习笔记 No.1
原创博文,转载请注明出处 。
1、安装twisted ,然后安装PyOpenSSL(一个Python开源OpenSSL库),这个软件包用于给Twisted提供加密传输支持(SSL)。最后,安装PyCrypto,一个包含了Python安全算法的包,用于提供SSH支持。为了使用Twisted并不一定要安装PyOpenSSL和PyCrypto。但是不安装这些,将无法使用Twisted的SSL和SSH功能,其他功能还是可用的。site-packages/twisted目录中可查看源代码。
执行以下语句:如果没出现错误,就成功的把SSH支持添加到Twisted中
1 import OpenSSL
2 import twisted.internet.ssl
3 twisted.internet.ssl.SSL
1 import Crypto
2 import twisted.conch.ssh.transport
3 twisted.conch.ssh.transport.md5
2、预备知识: twisted 是事件驱动的框架,这一点很重要,学过gui 设计或者java 中swing 的人应该很清楚其中的概念。每个事件驱动的框架都包含了一个特殊的函数叫做事件循环(event loop)。每次启动,事件循环都会立即运行。这个函数运行时等待事件的发生。当事件发生时,事件循环函数会自动触发相关的事件处理函数。而twisted中实现这一功能,使用reactor对象。
Twisted的网络通信模型最基本的也要由四部分组成:反应器(reactor)、协议(protocol)、工厂(factory)、transports(传输协议)。其中反应器用来执行事件循环,分发事件处理等等,每个应用程序中一般只能启动一个reactor。协议用来完成与一个已经连接成功的主机的交互功能,主要有数据的接收和发送功能。连接的断开事件也可以在这里处理。工厂负责与一个协议的启动和关闭功能,而且还负责在连接成功时生成一个协议对象,用于与远程主机的交互功能。transports负责描述两个端点进行连接的细节。
protocol和transports是去耦合的,这就保证了多个protocol可以复用同一类的transport
关于Deferred:
回调是事件驱动编程的一个基本组成部分,而且是reactor指示应用,事件到来的途径。Twisted提供一个抽象机制叫做Deferred来管理这些回调函数。
Deferred拥有一对回调链,一条是对应success的callbacks,另一条是对应errors的errbacks。如图:callback和errback是成对出现的

如果成功执行1st callback,接下来执行2nd callback,否则出现错误执行2nd errback,以此类推。(注:callback上一次返回的数值都会作为下一个callback的第一参数。)
有四种方法注册回调函数: addCallbacks(),addCallback(),addErrback(),addBoth()
addCallbacks()有两个参数,分别是callback和errback
addCallback()一个参数callback,另外有一个隐性的errback(官方文档称之为pass-through,我认为就是不作为的意思)
addErrback()一个参数errback,另外有一个隐性的callback。
addBoth()对callback链和errback链添加同一个回调函数,类似于try/except/finally中的 finally部分
一个Deferred只能被启动一次,否则会引发AlreadyCalledError。
发生在第N层的exceptions或者返回一个Failure,会在第N+1层的errback得到处理,如果第N+1层没有errback,程序的执行会停止并且触发一个Unhandled Error
特别需要强调的是,我们应该尽量避免在回调函数中使用会阻塞I/O的函数。否则,我们将失去所有使用reactor所带来的优势。
首先我们来看一下twisted web 的结构,有助于我们更好的理解twisted网络编程。

当服务端接受到一个来自客户端的请求,就会产生一个Request 对象并把这个对象发送到Resource 系统,Resource系统会根据客户端所请求的路径分派合适的Resource 对象,这个对象会提交给客户端并呈现出来。
Resource是twisted网络服务端编程中最低层次的抽象概念,目前twisted正寻求比Resource系统更好层次的工具,Nevow (暂时还没研究,留着)见:点击
本笔记是依据Twisted Network Programming Essentials 2nd Edition 英文版 自己翻译学习而来
资料来源:官方文档:点击进入
Twisted Network Programming Essentials 2nd Edition 英文版
twisted学习笔记 No.1的更多相关文章
- twisted学习笔记No.3 Web Clients
原创博文,转载请注明出处. 这一章我们学习利用twisted建立web 客户端. twisted.web.client.getPage用来异步下载一个页面,并且返回一个deferred from tw ...
- twisted学习笔记4 部署Twisted 应用程序
原创博文,转载请注明出处. Twisted是一个可扩展,跨平台的网络服务器和客户端引擎. Twisted Application 框架有五个主要基础部分组成:服务,应用程序,TAC文件插件和twist ...
- twisted 学习笔记二:创建一个简单TCP客户端
#coding=utf-8 from twisted.internet import reactor,protocol class QuickClient(protocol.Protocol): de ...
- twisted学习笔记 No.2 WebServer
原创博文,转载请注明出处. 当服务器接收到一个客户端请求后,会创建一个请求对象并传递到资源系统,资源系统会根据请求路径分发到相应的资源对象,资源被要求渲染自身并返回结果到客户端. 解析HTTP Req ...
- twisted 学习笔记一:事件循环
from twisted.internet import reactor import time def printTime(): print "Current time is", ...
- Mudo C++网络库第六章学习笔记
muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
随机推荐
- 独立博客网站FansUnion.cn操作2多年的经验和教训以及未来计划
今天,我把运营了2年的独立博客站点FansUnion给"归零"了. 2012年6月.我成功搭建了自己的博客站点FansUnion.cn,这是因为自己的不懈努力和时代发展成就的 ...
- 两个容易被忽略的mysql知识
原文:两个容易被忽略的mysql知识 为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql ...
- HDU多赛学校9 HDU4969 Just a Joke 【数学积分】
数学题目 意甲冠军:的男孩向圆上的女孩跑去,保持男孩女孩圆心在同一条直线上.这过程中,男孩女孩均匀速 给出男孩女孩速度,圆的半径,男孩最长能跑的距离 问男孩是否能跑到女孩那里 能够用积分来解这道题,我 ...
- —软测试—(5)计算机系统CPU组成
事实上,我们不得不很早就接触到电脑系统的知识,但仍然会出现不起眼,现象清醒的认识,非常严重丢分. 要我们花功夫去理解,由于非常多东西我们接触不到,比方校验码.码制等.假设你不去理解而是去记,就非常难參 ...
- jQuery的ajax对WebApi和OData的封装
基于jQuery的ajax对WebApi和OData的封装 WebApi 的使用带来了一个显著的特点,对type有一定的要求.一般ajax的type无非就是两种,GET和POST.如果用JSONP来跨 ...
- Cocos2d-xvision3.0加载失败,和,Vs2012环境搭建
1.安装好VS2012,下载Cocos2d-x3.0 双击击win32 sln运行VS2012 如果加载失败点击程序运行,输入devenv.exe /resetuserdata 回车,然后再进入VS, ...
- java阅读器hdfs单纯demo
周围环境:eclipse + eclipse hadoop插入. hadoop + rhel6.4 package test; import java.io.IOException; import j ...
- 走进windows编程的世界-----windows进程
Windows进程 1 Windows进程 进程是一个容器,包括了一个应用程序实例的各种资源.Windows多任务的操作系统,因此能够同一时候运行多个进程. 2 Windows进程的 ...
- 七牛云存储C#例用小例子 C#笔记
最近有需求要把网站的图片传到云存储上去.于是就找到了七牛.看上面的SDK...看了才发现里面注释很少.当时看的头大.在网上搜一下,基本上没有好的例子.给初学者带来很大的不便!不过最后还是做出来了.在这 ...
- NSNotification、delegate和KVO的区别
1.效率:delegate比nsnotification高.2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值, 也就是delegat ...