原创博文,转载请注明出处 。

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的更多相关文章

  1. twisted学习笔记No.3 Web Clients

    原创博文,转载请注明出处. 这一章我们学习利用twisted建立web 客户端. twisted.web.client.getPage用来异步下载一个页面,并且返回一个deferred from tw ...

  2. twisted学习笔记4 部署Twisted 应用程序

    原创博文,转载请注明出处. Twisted是一个可扩展,跨平台的网络服务器和客户端引擎. Twisted Application 框架有五个主要基础部分组成:服务,应用程序,TAC文件插件和twist ...

  3. twisted 学习笔记二:创建一个简单TCP客户端

    #coding=utf-8 from twisted.internet import reactor,protocol class QuickClient(protocol.Protocol): de ...

  4. twisted学习笔记 No.2 WebServer

    原创博文,转载请注明出处. 当服务器接收到一个客户端请求后,会创建一个请求对象并传递到资源系统,资源系统会根据请求路径分发到相应的资源对象,资源被要求渲染自身并返回结果到客户端. 解析HTTP Req ...

  5. twisted 学习笔记一:事件循环

    from twisted.internet import reactor import time def printTime(): print "Current time is", ...

  6. Mudo C++网络库第六章学习笔记

    muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  9. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

随机推荐

  1. oracle rac常用的命令

    oracle rac常用的命令 节点层:olsnodes 网络层: oifcfg 集群层:crsctl,ocrcheck,ocrdump,ocrconfig 应用层:srvctl,onsctl,crs ...

  2. 从头开始学JavaScript (十一)——Object类型

    原文:从头开始学JavaScript (十一)--Object类型 一.object类型 一个object就是一系列属性的集合,一个属性包含一个名字(属性名)和一个值(属性值). object对于在应 ...

  3. 基于STM32旋转编码器

    ..\..\SYSTEM\usart\usart.c(1): error:  #5: cannot open source input file "sys.h": No such ...

  4. (二)spring MVC配置

    使用Maven添加依赖的jar包 <!-- 自动扫描的包名 -->                                                 <mvc:reso ...

  5. 我的MYSQL学习心得(七)

    原文:我的MYSQL学习心得(七) 我的MYSQL学习心得(七) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  6. iOS根据获取的月和日星座名称

    /** * 依据月和日的下标获取星座名 * * @param monthIndex 月的下标 * @param dayIndex 日的下标 * * @return 星座名 */ - (NSString ...

  7. 【Unity 3D】学习笔记三十八:角色控制器

    角色控制器 在unity中,已经帮我们实现的上下左右跳等动作,并将他们封装成了角色控制器.角色控制器保存在unity标准资源包中,能够说是很的强大.能够模拟第一或者第三人称视角.不受刚体的限制,很适用 ...

  8. [使用]Git--命令行

    如何利用终端命令将文件上传到github远程服务器 (1) git status 命令查看下状态. (2) git pull 更新代码,确保代码是库上最新代码,防止覆盖其他人的提交. (3) git ...

  9. ajax——client访问webservice基本用法

    学前aps.net当我学会了使用服务器端的访问webservice方法,然后实现一个样本:web server模拟网上购物,今天学习asp.net ajax的时候学习到了client直接訪问webse ...

  10. 使用Bootstrap

    开始使用Bootstrap 作为一名Web开发者而言,如果不借助任何前端框架,从零开始使用HTML和CSS来构建友好的页面是非常困难的.特别是对于Windows Form的开发者而言,更是难上加难. ...