设计Twisted应用程序
来源:互联网 发布:外贸电商cms 编辑:程序博客网 时间:2024/06/11 21:28
「五冠真品」李小龙类似款手感巨好纳帕革皮衣-感动 20699 199.0元
原文:http://www.klipdas.com/blog/?p=designing-twisted-applications
2.4 设计Twisted应用程序
2.4.1 目标
本文讲述好的Twisted应用是如何构造的,对Twisted初学者来说这很有用的,他们希望书写整洁,易维护的代码,这反映了良好的编程习惯。 读者会想熟悉使用Twisted来进行Deferreds异步(8页)及服务端(13页)和客户端(17页)编程。
2.4.2 标准设计的示例: TwistedQuotes
TwistedQuotes是一个很简单的插件,它很好的展示了Twisted的强大,它会输出很小的内核功能 ——每日报价——它能通过Twisted的支持接口来访问:网页、email、即时消息、特定的每日报价协议等。 设置项目TwistedQuotes查看《建立TwistedQuotes项目目录》(22页)。
应用核心预览quoters.py
from random import choicefrom zope.interface import implementsfrom TwistedQuotes import quoteprotoclass StaticQuoter: """ Return a static quote. """ implements(quoteproto.IQuoter) def __init__(self, quote): self.quote = quote def getQuote(self): return self.quote class FortuneQuoter: """ Load quotes from a fortune-format file. """ implements(quoteproto.IQuoter) def __init__(self, filenames): self.filenames = filenames def getQuote(self): quoteFile = file(choice(self.filenames)) quotes = quoteFile.read().split('/n%/n') quoteFile.close() return choice(quotes)
此代码清单为我们展示了Twisted Quotes系统是怎么一回事,该代码没有任何与外界交流的方式,但它提供了一个简介和明确的抽象:“给我每日报价”。
注意,此模块还没有导入任何Twisted功能!这种方式是为了系统的集成。如果你的“业务对象”没有卡在UI中,你就可以让这个模块以不同的协议、GUI、文件格式等集成那些对象。拥有这样的类就提供了相互之间分离的方式,允许彼此见单独使用。
这种方式下,Twisted本身对你的程序逻辑的影响是微乎其微的,尽管Twisted“dot products”具有很强的交互性,他们也采用这种做法。你可以单独使用他们,因为彼此独立。他们以明确的方式通信,并且只在通信提供了一些额外的特性。因此,你可以拿twisted.enterprise和twisted.web一起使用,但两者并不彼此依赖,因为他们都围绕着Deferreds来集成(102页)。
你的Twisted应用也应该尽量做到这种方式,有(至少)一个实现你特定功能的模块独立于任何UI代码。
下一步,我们会需要以展示给用户的方式来想象这个抽象逻辑。我们要通过编写Twisted服务端协议来实现,它会响应连接它的客户端,给客户端发生一个报价,然后关闭连接。注意:不要太注重它的细节——90%的用户接口实现都和Twisted没有关系,有大量的文章介绍不同的实现方式。
quoteproto.py
from zope.interface import Interfacefrom twisted.internet.protocol import Factory, Protocolclass IQuoter(Interface): """ An object that returns quotes. """ def getQuote(): """ Return a quote. """ class QOTD(Protocol): def connectionMade(self): self.transport.write(self.factory.quoter.getQuote()+'/r/n') self.transport.loseConnection()class QOTDFactory(Factory): """ A factory for the Quote of the Day protocol. @type quoter: L{IQuoter} provider @ivar quoter: An object which provides L{IQuoter} which will be used by the L{QOTD} protocol to get quotes to emit. """ protocol = QOTD def __init__(self, quoter): self.quoter = quoter
这是一个非常简单的Protocol实现,这里再次介绍了这个模式。Protocol基本上没有自己的逻辑,刚好可以与一个生成报价(一个Quoter)的对象和可以向TCP连接(一个Transport)传输字节的对象绑在一起。当客户端连接服务器时,QOTD实例被创建,它的connectionMade方法被调用。
QOTDFactory的作用是指定Twisted框架如何创建可以处理连接的Protocol实例,Twisted不会实例化QOTDFactory,你要之后在Twisted插件中自己完成。
注意:你可以在《服务端》(13页)中查阅关于Protocol和Factory更多信息。
我们只要有了抽象——Quoter——我们就有了将其连接到网络的机制——QOTD协议——下一步要做的事情就是将功能链上的最好一环节摆在抽象和用户间。该环节允许用户选择一个Quoter并配置协议,编写该配置在《Applicatoin HOWTO》介绍(160页)。
- 设计Twisted应用程序
- Twisted 内部模型设计
- twisted 优秀设计
- 一个典型的Twisted应用程序框架
- 一个典型的Twisted服务端应用程序
- twisted
- Twisted
- Twisted
- Twisted是python下的用来进行网络服务和应用程序编程的框架
- 设计 .NET 应用程序
- 设计 .NET 应用程序
- 聊天室应用程序 总体设计
- 设计 .NET 应用程序
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计
- Oracle数据库中的''与NULL的关系
- linqtosql - 插入 删除 更新 查询
- 新时代新潮流WebOS 【18】假如浏览器离开了JavaScript
- 建立 Twistedquotes应用
- 我承受不住那么多的爱
- 设计Twisted应用程序
- SPFA 算法
- #define的用法
- asp.net 性能
- 深度剖析:具名常量
- VMWARE 7 CN LITE 安装ArchLinux 配置网络
- RAM7中断重映射
- asp.net跨页投递
- ASP.Net生成静态HTML页