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

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. Android(Lollipop/5.0) Material Design(六) 使用图像

    Material Design列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二 ...

  2. 面向对象三大特征之多态——Java笔记(七)

    多态:     同一个实体同时具有多种形式     编译时的类型有声明该变量时使用的类型决定,运行时的类型有实际赋值给变量的对象决定     如果编译时类型和运行时类型不同,就出现多态 例: clas ...

  3. 一位OWin服务器新成员TinyFox

    一位OWin服务器新成员TinyFox TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本 ...

  4. 基于Js实现的UrlEncode和UrlDecode函数代码

    <script language="javascript">//UrlEncode函数function UrlEncode(str){  var ret="& ...

  5. 【源代码】StringBuilder和StringBuffer震源深度分析

    //------------------------------------------------------------------------ 写篇博客不easy.请尊重作者劳动成果. 转载请注 ...

  6. BCM策略路由交换芯片

    BCM几个交换芯片的寄存器和相关的路由 EGR_L3_NEXT_HOP.EGR_L3_INTF.ING_L3_NEXT_HOP BCM XGS系列SDK中和路由相关的几个命令 l3 l3table. ...

  7. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪

    官方的例子 是 长方形的. 我这里 用于 正方形的头像 所以  做如下  修改 #preview-pane .preview-container { width: 73px; height: 73px ...

  8. asp.net 发邮件

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. 使用jquery实现放大镜效果

    原文:使用jquery实现放大镜效果 实现原理 首先,我们讲解一下放大镜效果的实现方式: 方法一:准备一张高像素的大图,当鼠标放到原图上,加载显示大图的对应位置. 方法二:对原图片进行放大,也就是调整 ...

  10. 给已经编译运行的Apache增加mod_proxy模块的配置方法

    在Linux系统下,需要给已经编译运行的Apache增加mod_proxy模块,可以按照如下方法配置. 具体配置步骤如下: 1. 首先定位到Apache源码的 proxy目录 # cd /root/s ...