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

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. sharepoint 2013 更改用户配置文件属性值的方法 modify user profile

    在此前写了两篇文章sharepoint 的UserProfile博客 sharepoint 2010 获取用户信息UserProfile方法 sharepoint 2010 怎样用SocialComm ...

  2. hdu2602 Bone Collector (01背包)

    本文来源于:http://blog.csdn.net/svitter 题意:典型到不能再典型的01背包.给了我一遍AC的快感. //================================== ...

  3. R语言数据分析系列六

    R语言数据分析系列六 -- by comaple.zhang 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步.探索性数据分析. 统计量,即统计学里面关注的数据集 ...

  4. linux通过key区别登陆的人

    key区分登录用户 脚本放 /etc/profile.d,会默认登录的时候执行, 类似于 #!/bin/bash # filename: /etc/profile.d/set_log_file.sh ...

  5. mysql_【MySQL】常见的mysql 进程state

    Analyzing 线程是对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE ). checking permissions 线程是检查服务器是否具有所需的权限来执行该语句. Ch ...

  6. jg-table 过程2 ( jgTable )

    jg-table ( jgTable )  添加一些新的功能,这是多行表头支持,要添加到,现在支持拖放多行表来改变头部的宽度, 假设设置cloneTheadToFoot 能够自己主动翻转多行表头,这也 ...

  7. Android 它们的定义ListView实现底部和页下拉刷新刷新的顶

    在项目开发.由于数据量过大,寻呼需要加载或下拉刷新.为了缓解长期等待-time负载.这个博客的评论中被自己的定义实例ListView实现底部的下拉刷新页面正在加载结果和顶部. 其效果图: 一.List ...

  8. ASP.NET学习笔记--自己写的Login.aspx

    以前有大学有学过,但是没学好,现在准备完全自己动手做一个网站,学习一下ASP.NET 做一个登录页面,首先要有创建一个新的网站,添加Login.aspx,然后做出自己想要的DIV和CSS布局, 之后创 ...

  9. TCP连接状态

    TCP 连接状态按 TCP 协议的标准表示法, TCP 可具有如下几种状态,为讨论方便,如下讨论中区分服务端和客户端,实际软件处理上对二者一视同仁. CLOSED关闭状态.在两个通信端使用“三路握手” ...

  10. cocos2d-x3.0之请求网络(phpserver)

    HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos ...