2013年8月29日

第十二部分 改进诗歌下载服务器[转]

摘要: 你可以从这里从头阅读这个系列。新的服务器实现 这里我们要新写一个Twisted版的服务器。然后,再来讨论一些Deferred的新功能。在第九、十部分,我们提出了诗歌转换引擎这个概念。由于其实现太过简单,因此我们用随机选择来模拟了可能会出现转换失败的情景。但如果转换引擎位于服务器端,那么当服务器宕机就会出现真实的转换失败的情景了。因此,在这部分我们要实现一个诗歌样式转换服务器,然后在一个部分,我们会重写我们的诗歌下载客户端来使用这一服务并且学习Deferred的新功能。设计协议 到目前为止,服务器端与客户端之间的交互都是单向的。但样式转换服务需要两者进行双向交互-客户端将原始式样的诗歌发送给.. 阅读全文

posted @ 2013-08-29 17:31 无为在歧路 阅读(130) 评论(0) 推荐(0) 编辑

第十一部分:改进诗歌下载服务器[转]

摘要: 你可以从这里从头阅读这个系列。诗歌下载服务器到目前为止,我们已经学习了大量关于诗歌下载客户端的Twisted的知识,接下来,我们使用Twisted重新实现我们的服务器端。利益于Twisted的抽象机制,接下来你会发现我们前面已经几乎全部学习到这部分知识了。其实现源码在twisted-server-1/fastpoetry.py中。之所以称其为fastpoetry是因为其并没有任何延迟的传输诗歌。注意到,其代码量比客户端少多了。让我们一部分一部分地来看服务端的实现,首先是poetryProtocol:class PoetryProtocol(Protocol): def connectio... 阅读全文

posted @ 2013-08-29 17:29 无为在歧路 阅读(120) 评论(0) 推荐(0) 编辑

第十部分:增强defer功能的客户端[转]

摘要: 可以从这里从头开始阅读这个系列。版本5.0现在我们将要向诗歌下载客户端添加一些新的处理逻辑,包括在第九部分提到要添加的功能。不过,首先我要说明一点:我并不知道如何实现Byronification引擎。那超出了我的编程能力范围。取而代之的,我想实现一个简单的功能,即Cummingsifier。其只是将诗歌内容转换成小写字母:def cummingsify(poem) return poem.lower()这个方法如此之简单以至于它永远不会出错。版本5.0的实现代码在twisted-client-5/get-poetry.py文件中。我们使用了修改后的cummingsify,其会随机地选择以... 阅读全文

posted @ 2013-08-29 17:28 无为在歧路 阅读(144) 评论(0) 推荐(0) 编辑

第九部分:第二个小插曲,Deferred[转]

摘要: 可以从这里从头来阅读这个系列更多关于回调的知识稍微停下来再思考一下回调的机制。尽管对于以Twisted方式使用Deferred写一个简单的异步程序已经非常了解了,但Deferred提供更多的是只有在比较复杂环境下才会用到的功能。因此,下面我们自己想出一些复杂的环境,以此来观察当使用回调编程时会遇到哪些问题。然后,再来看看deferred是如何解决这些问题的。因此,我们为诗歌下载客户端添加了一个假想的功能。设想一些计算机科学家发明了一种新诗歌关联算法,Byronification引擎。这个漂亮的算法根据一首诗歌生成一首使用Lord Byron式的同样的诗歌。另外,专家们提供了其Python的接口 阅读全文

posted @ 2013-08-29 17:24 无为在歧路 阅读(176) 评论(0) 推荐(0) 编辑

第八部分:使用Deferred的诗歌下载客户端[转]

摘要: 可以从这里从头开始阅读这个系列。客户端4.0我们已经对deferreds有些理解了,现在我们可以使用它重写我们的客户端。你可以在twisted-client-4/get-poetry.py中看到它的实现。这里的get_poetry已经再也不需要callback与errback参数了。相反,返回了一个用户可能根据需要添加callbacks和errbacks的新deferred。def get_poetry(host, port): """ Download a poem from the given host and port. This function retu 阅读全文

posted @ 2013-08-29 17:20 无为在歧路 阅读(122) 评论(0) 推荐(0) 编辑

第七部分:小插曲,Deferred[转]

摘要: 你可以从这里从头开始阅读这个系列回调函数的后序发展在第六部分我们认识这样一个情况:回调是Twisted异步编程中的基础。除了与reactor交互外,回调可以安插在任何我们写的Twisted结构内。因此在使用Twisted或其它基于reactor的异步编程体系时,都意味需要将我们的代码组织成一系列由reactor循环可以激活的回调函数链。即使一个简单的get_poetry函数都需要回调,两个回调函数中一个用于处理正常结果而另一个用于处理错误。作为一个Twisted程序员,我们必须充分利用这一点。应该花点时间思考一下如何更好地使用回调及使用过程中会遇到什么困难。分析下3.1版本中的get_poet 阅读全文

posted @ 2013-08-29 17:16 无为在歧路 阅读(186) 评论(0) 推荐(0) 编辑

第六部分:抽象地利用Twisted[转]

摘要: 你可以从这里从头开始阅读这个系列。打造可以复用的诗歌下载客户端 我们在实现客户端上已经花了大量的工作。最新版本的(2.0)客户端使用了Transports,Protocols和Protocol Factories,即整个Twisted的网络框架。但仍有大的改进空间。2.0版本的客户端只能在命令行里下载诗歌。这是因为PoetryClientFactory不仅要下载诗歌还要负责在下载完毕后关闭程序。但这对于”PeotryClientFactory“的确是一项分外的工作,因为它除了做好生成一个PoetryProtocol的实例和收集下载完毕的诗歌的工作外最好什么也别做。我需要一种方式来将诗歌传给开. 阅读全文

posted @ 2013-08-29 17:10 无为在歧路 阅读(120) 评论(0) 推荐(0) 编辑

第五部分:由twisted扶持的客户端[转]

摘要: 你可以从这里从头开始阅读这个系列抽象地构建客户端在第四部分中,我们构建了第一个使用Twisted的客户端。它确实能很好地工作,但仍有提高的空间。首先是,这个客户端竟然有创建网络端口并接收端口处的数据这样枯燥的代码。Twisted理应为我们实现这些例程性功能,省得我们每次写一个新的程序时都要去自己实现。Twisted这样做也将我们从像异步I/O操作中包括许多像异常处理这样的细节处理解放出来。更多的细节处理存在于多平台上运行我们的代码中。如果你那个下午有空,可以翻翻Twisted的WIN32实现源代码,看看里面有多少小针线是来处理跨平台的。另一问题是与错误处理有关。当运行版本1的Twisted客户 阅读全文

posted @ 2013-08-29 17:05 无为在歧路 阅读(265) 评论(0) 推荐(0) 编辑

第四部分:由Twisted支持的客户端[转]

摘要: 你可以在这里从头开始阅读这个系列。第一个twisted支持的诗歌服务器尽管Twisted大多数情况下用来写服务器代码,为了一开始尽量从简单处着手,我们首先从简单的客户端讲起。让我们来试试使用Twisted的客户端。源码在twisted-client-1/get-poetry.py。首先像前面一样要开启三个服务器:python blocking-server/slowpoetry.py --port 10000 poetry/ecstasy.txt --num-bytes 30python blocking-server/slowpoetry.py --port 10001 poetry/fas 阅读全文

posted @ 2013-08-29 17:01 无为在歧路 阅读(125) 评论(0) 推荐(0) 编辑

第三部分:初步认识Twisted[转]

摘要: 第三部分:开始认识Twisted可以从这里从头开始阅读这个系列。用twisted的方式实现前面的内容最终我们将使用twisted的方式来重新实现我们前面的异步模式客户端。不过,首先我们先稍微写点简单的twisted程序来认识一下twisted。最最简单的twisted程序就是下面的代码,其在twisted-intro目录中的basic-twisted/simple.py中。from twisted.internet import reactorreactor.run()可以用下面的命令来运行它:python basic-twisted/simple.py正如在第二部分所说的那样,twisted 阅读全文

posted @ 2013-08-29 17:00 无为在歧路 阅读(172) 评论(0) 推荐(0) 编辑

导航