##language:zh ''' Twisted是一个专门用于python的网络开发的框架。可以说是现在python中新的一支至力于发展高性能网络开发的框架,发展很稳定。 本章节是关于 Py Twisted 技术文章的汇编 主要转自 http://blog.huangdong.com ''' -- dreamingk [<>] [[http://wiki.woodpecker.org.cn/moin.cgi/FLOSS#head-23f47c8e1bae50ed4ed4d0faba5d36e98ae78d6a|返回上层树]] <> = 解读Twisted的reactor = ''初次使用Twisted的开发人员会惊讶于reactor的神秘,我到现在也多次听到了大家说哪里去寻找reactor的文档。为什么我们不能找到twisted.internet.reactor的文档呢?那么,现在我带大家进行一次reactor的神秘之旅。'' == 解读Twisted的reactor(1) == 初次使用Twisted的开发人员会惊讶于reactor的神秘,我到现在也多次听到了大家说哪里去寻找reactor的文档。为什么我们不能找到twisted.internet.reactor的文档呢?那么,现在我带大家进行一次reactor的神秘之旅。 [[解读Twisted的reactor(1)]] == 解读Twisted的reactor(2) == Twisted框架不只是想到了跨操作系统、跨进程/线程,还考虑到了跨语言的Jython和Cython。这一点会让所有python开发人员受益。先来看看在Cython下,Twisted的reactor的初始化。 [[解读Twisted的reactor(2)]] == 解读Twisted的reactor(3) == 看了Twisted的标准reactor的使用,会有许多人在说它的考虑不过如此,只是与的复杂了点而已。有没有更强的地方呢?今天的工作,让我感觉到挖到了Twisted的金矿!一起走进Twisted为daemon的高效开发而准备的超强reactor们。 [[解读Twisted的reactor(3)]] == 解读Twisted的reactor(4) == Twisted的reactor到底有多少方法我们可以使用?它到底有什么功能?这也是常常出现在我们心底的疑惑,其实Twisted在处理这个问题时使用的是面向对象的处理方法,reactor实现了一系列的接口以供应用来使用。 [[解读Twisted的reactor(4)]] [[http://wiki.woodpecker.org.cn/moin.cgi/FLOSS#head-23f47c8e1bae50ed4ed4d0faba5d36e98ae78d6a|返回上层树]] -------- = 使用Twisted建立你的服务器 = 本章将向您讲述如何利用Twisted来建立您的应用服务器。 == 使用Twisted建立你的服务器(1) == Twisted不只是在性能和环境的多样适应性上精益求精,它最重要的一个突破在于使用组件化的方式开发网络应用程序。可以让大家审视自己最为关注的重点,而忽略一些辅助性的事务。当几名开发人员将自己的成果完成时,汇聚到一起就能成为一个强大的系统。当然,需要技巧来进行这之中的协调,协调的基础是我们自己必须了解这样的过程和它们之间的接口关联。 [[使用Twisted建立你的服务器(1)]] == 使用Twisted建立你的服务器(2) == 请求和实例化的顺序是reactor、factory、protocol。但是真实的开发顺序返回是倒过来的,因为你可能最初始得到的需求是要用什么协议,在设计协义时才能了解需要哪些持久数据和在所有的用户请求是需要共享的内容,以及初始化时所需要完成的事务,最终你才能依据你要应用的平台来考虑优化的方法。我们先来看看如何完成一个自己的协议开发以适用于Twisted框架。 [[使用Twisted建立你的服务器(2)]] [[http://wiki.woodpecker.org.cn/moin.cgi/FLOSS#head-23f47c8e1bae50ed4ed4d0faba5d36e98ae78d6a|返回上层树]] ----------- = Twisted服务器开发技巧 = 本章讲述了在使用python开发网络应用时如何利用Twisted来进行服务器开发的技巧。 == Twisted服务器开发技巧(1) - 将性能优化到底 == Twisted是一个非常具有想像力的框架。我已经被它的代码所折服,我想在我下面再使用python开发网络应用时,可能只会选用Twisted了。但是,一个真正达到性能优化服务器,还是需要我们在程序中真正良好的去应用Twisted的各种工具的。 最常见的情况就是我们将一个非阻塞的应用中,加入了长时间的处理过程,从而达到了阻塞的效果,从而让大家都因为一位同志的长时工作而等待。 [[Twisted服务器开发技巧(1)]] == Twisted服务器开发技巧(2) - 端口与权限的游戏 == 1024,这个数字在端口中代表着权限。如果你不是root,哪么将不能随便启动这个数字以内的侦听端口。但有时,你却希望用一个非root用户来进行这个服务的处理。当然,除了这些,Twisted还有一些有效的帮助你进行服务运行的功能。 [[Twisted服务器开发技巧(2)]] == Twisted服务器开发技巧(3) - 动态配置加载 == 我们经常去做配置文件的更改,BSDer们常常需要在配置文件更改后重新启动daemon。这样的服务很多,比如apache。有一天我忽然羡慕起破烂的tomcat来,原因很简单,它的配置文件更改后,不再需要我去重新启动它了。其实,你只需要在性能和功能间寻找一个平衡点,所有的功能都能做到,只是你是否考虑负载的能力。Twisted考虑到了动态加载这样的功能,就是在指定的时间去做一件事,但是为了让这样的功能不去影响性能,最好的办法是将这样的时间调度不使用阻塞的sleep,而使用事件的queue再进行调度。 [[Twisted服务器开发技巧(3)]] [[http://wiki.woodpecker.org.cn/moin.cgi/FLOSS#head-23f47c8e1bae50ed4ed4d0faba5d36e98ae78d6a|返回上层树]] ----------- = Twisted中的多任务处理探索 = Twisted中的多任务处理探索 == Twisted中的多任务处理探索 (1) == 如果开发一个服务器的系统,你必然在线程和进程中徘徊选择。因为服务器运行在一个多用户的情况之下,多个用户的请求同时发起,哪么我们就要在同一时间为这些用户进行数据处理并将结果返回给用户。你必然要选择将处理分到不同的线程或进程上去做处理,否则用户就只能序列的得到回应,而没有了并发的效果。 先来看看线程,对于Twisted,它视不同的情况已经为我们提供了线程使用的框架,这在IReactorThreads接口中已经定义了。但是在IReactorThreads中定义了两种线程的使用方法:callFromThread和callInThread。我使用和很久的时间才了解清楚它们的区别及用途。 [[Twisted中的多任务处理探索_(1)]] [[http://wiki.woodpecker.org.cn/moin.cgi/FLOSS#head-23f47c8e1bae50ed4ed4d0faba5d36e98ae78d6a|返回上层树]] -----------