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

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. ServiceStack.Redis——Redis于.net向上client解

    ServiceStack.Redis--Redis于.net向上client解 源代码和使用: https://github.com/ServiceStack/ServiceStack.Redis 样 ...

  2. 2136 Largest prime factor(打表)

    Problem Description Everybody knows any number can be combined by the prime number.Now, your task is ...

  3. 照片详细解释YUV420数据格式

    YUV格式有两大类:planar和packed. 对于planar的YUV格式.先连续存储全部像素点的Y.紧接着存储全部像素点的U.随后是全部像素点的V. 对于packed的YUV格式,每一个像素点的 ...

  4. Effective C++ 18-23

    18.接口用于完整的类,使最小. 用户接口类是指程序猿这个类可以访问所获得的接口,典型接口具有在存在唯一功能,好的包装类的数据成员. 这意味着一个完整的接口,包括所有 合理的功能操作.最小指功能和特征 ...

  5. css3简单几步画一个乾坤图

    原文:[原创]css3简单几步画一个乾坤图 效果如上,鼠标移上去会有动画. 代码如下非常简单: <html> <head> <style> .outer{heigh ...

  6. Codeforces 328B-Sheldon and Ice Pieces(馋)

    B. Sheldon and Ice Pieces time limit per test 1 second memory limit per test 256 megabytes input sta ...

  7. ThinkPHP 3.2 开放 cache注缓存,过滤非法字符

    打开缓存配置文件 /Application/Common/conf/cache.php源代码如下面: <?php return array( //'配置项'=>'配置值' 'LAYOUT_ ...

  8. css3实现色子自动翻转效果

    原文:css3实现色子自动翻转效果 css3使我们能够跳出2d空间,实现3维空间的动画效果,这里给出一个自动翻转的3d色子动画效果制作过程. 第一步,首先进行HTML的布局,对于3D效果,布局有一定的 ...

  9. Google Maps API Web Services

    原文:Google Maps API Web Services 摘自:https://developers.google.com/maps/documentation/webservices/ Goo ...

  10. Android DES AES MD5加密

    AES加密: <span style="font-size:18px;">package com.example.encrypdate.util; import jav ...