Twisted框架

Twisted是一个事件驱动型的网络模型。时间驱动模型编程是一种范式,这里程序的执行流由外部决定。特色是:包含一个事件循环,当外部事件发生时,使用回调机制来触发相应的处理。react

线程模式:程序员

1.单线程同步模型,任务按照顺序执行。若是某个任务由于IO阻塞,其余全部的任务都必须等待,直到完成才能执行,但若是任务之间没有相互等待的话,就使得程序没必要要的下降了运行速度。数据库

2.多线程,线程是由操做系统来管理的,在多处理器系统上交错执行。这使得单个线程阻塞在某个资源的同时其余线程能够继续执行,与完成相似功能的同步程序比,这种方式更有效,但程序猿必须本身写代码保护共享资源,防止其被多个线程同时访问。多线程程序更加难以推断,由于这类程序不得不经过线程的同步机制如锁、可重入函数、线程局部存储或者其余机制来处理线程安全问题,若是实现不当就会出现bug编程

3.事件驱动模型中,若是有三个任务交错执行,可是仍然在一个单独的线程控制中,当处理IO或者其余昂贵的操做时,注册一个回调到事件循环中,而后当IO操做完成以后继续执行,回调描述来该如何处理某个事件,这可使得程序尽量的得以执行而不须要用到额外的线程,而且程序员也不须要专心线程安全问题。安全

Reactor模块服务器

反应堆,Twisted的核心就是reactor的事件循环,Reactor能够感知网络、文件系统以及定时器事件。他等待而后处理这些事件,从特定的平台的行为中抽象出来,并提供统一的接口,使得在网络协议栈的任何位置对事件作出相应都变得简单。网络

目前的在全部平台的默认Reactor都是基于poll API的。多线程

 阻塞调用是指调用结果返回以前,当前线程会被刮起,函数只有在获得结果以后才会返回。异步

非阻塞调用,好比read信息,若是缓冲区没有数据,则马上返回,不会等待数据到来。函数

Deferreds

Deferreds对象包含一堆回调链,一个是针对操做成功的回调,一个是针对操做失败的回调。初始常态下Deferred的两条链都是空的,在事件处理的过程当中,每一个阶段都为其添加处理成功和处理失败的回调。当一个异步结果到来时,Deferred对象就像是被激活,那么处理成功的回调和处理失败的回调就能够以合适的方式按照她们添加进来的顺序依次调用。

from twisted.internet import reactor
import getPage

def processPage(page):
    print page

def logError(error):
    print error

def finishProcessing(value):
    print "Shutting down..."
    reactor.stop()

url = "http://google.com"
deferred = getPage(url) # getPage returns a Deferred
deferred.addCallbacks(success, failure)
deferred.addBoth(stop)

reactor.run()

Deferred对象建立时包含两个添加回调的阶段,第一阶段,addcallback将processpage和logerror添加到他们各自归属的回调链中,而后addboth再将finishprocessing同时添加到这两个回调链中。

Transports

Transports表明网络中两个通讯结点之间的链接。Transports负责描述链接的细节,好比链接是面向流式的仍是面向数据报的,流控以及可靠性。TCP、UDP和Unix套接字可做为transports的例子。它们被设计为“知足最小功能单元,同时具备最大程度的可复用性”,并且从协议实现中分离出来,这让许多协议能够采用相同类型的传输。Transports实现了ITransports接口,它包含以下的方法:

write                   以非阻塞的方式按顺序依次将数据写到物理链接上
writeSequence           将一个字符串列表写到物理链接上
loseConnection          将全部挂起的数据写入,而后关闭链接
getPeer                 取得链接中对端的地址信息
getHost                 取得链接中本端的地址信息

Protocols

Protocols描述了如何以异步的方式处理网络中的事件。

makeConnection               在transport对象和服务器之间创建一条链接
connectionMade               链接创建起来后调用
dataReceived                 接收数据时调用
connectionLost               关闭链接时调用

Service

Service就是IService接口下实现的能够启动和中止的组件。Twisted自带有TCP、FTP、HTTP、SSH、DNS等服务以及其余协议的实现。其中许多Service均可以注册到单独的应用中。IService接口的核心是:

startService    启动服务。可能包含加载配置数据,设定数据库链接或者监听某个端口
stopService     关闭服务。可能包含将状态保存到磁盘,关闭数据库链接或者中止监听端口

咱们的Echo服务使用TCP协议,所以咱们可使用Twisted中IService接口下默认的TCPServer实现。

Application

Application是处于最顶层的Service,表明了整个Twisted应用程序。Service须要将其自身同Application注册,而后就能够用下面咱们将介绍的部署工具twistd搜索并运行应用程序。咱们将建立一个能够同Echo Service注册的Echo应用。

相关文章
相关标签/搜索