`
guangboo
  • 浏览: 34089 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

设计Twisted应用程序

阅读更多
「五冠真品」李小龙类似款手感巨好纳帕革皮衣-感动 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 choice
from zope.interface  import implements
from TwistedQuotes import  quoteproto

class 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 Interface
from  twisted.internet.protocol import Factory, Protocol

class 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页)。

分享到:
评论

相关推荐

    python twisted 网络编程教程 有代码示例

    通过 Twisted Quotes 这个例子来说明如何设计一个模块化的 Twisted 应用程序。 ##### 2.5 从零开始的 Twisted:Finger 服务的发展历程 这一节详细介绍了如何从头开始逐步构建一个 Finger 服务,并随着需求的增长...

    Twisted事件驱动网络框架

    Twisted是一个强大的开源Python库,主要用于构建异步网络应用程序。这个框架基于事件驱动的设计模式,使得它非常适合处理大量并发连接,尤其在服务器端编程中,可以高效地处理I/O密集型任务。下面将详细介绍Twisted...

    twisted入门教程源码

    Twisted 应用程序结构 - **reactor**: reactor 是 Twisted 的核心组件,负责事件调度和I/O操作。它处理网络事件,如连接请求、数据读取等,并调用相应的回调函数。 - **服务(Service)**: 服务是更高层次的抽象...

    twistd.pdf

    #### 九、设计Twisted应用程序 - **目标**:本节探讨了如何设计一个模块化的Twisted应用程序,以实现更好的可维护性和扩展性。 - **Twisted Quotes示例**:文档使用Twisted Quotes作为示例,详细介绍了如何将其设计...

    twisted网络通信模型

    一个简单的 Twisted 应用程序通常会创建一个工厂,定义协议类,然后使用反应器的 `connectXXX` 或 `listenXXX` 方法启动监听或连接,并调用 `reactor.run()` 启动事件循环。例如: ```python from twisted.internet...

    Twisted系列教程 的中文翻译

    第十四部分到第十六部分转向了测试和Twisted进程守护方面的内容,包括了如何测试Twisted应用、如何使用Twisted插件系统以及如何创建一个Twisted守护进程。 第十七部分和第十八部分则探讨了构造“回调”的另一种方法...

    中文Twisted入门教程

    #### 四、Twisted应用实例 - **客户端开发**:Twisted支持快速构建高性能的网络客户端,如HTTP客户端、FTP客户端等。通过定义协议和使用Deferred处理网络交互,可以轻松实现复杂的网络操作。 - **服务端开发**:...

    Twisted 17.9.0

    Twisted是基于事件驱动的网络引擎,它提供了一套完整的异步网络编程API,用于构建高性能、可扩展的网络应用程序。其设计思想是将复杂的并发处理简化为简单的回调函数,使得开发者可以更专注于业务逻辑,而不是底层的...

    适合python3.8的Twisted

    安装完成后,即可在项目中导入并使用`Twisted`提供的各种功能,构建高性能的网络应用程序。无论是开发服务器端应用、客户端应用,还是构建复杂的分布式系统,`Twisted` 都能提供强大而灵活的支持。

    twisted introduction

    由于标签中提到了“python”,这表明Twisted框架是专为Python语言设计的。因此,使用这个框架的开发者需要具备Python编程的基础知识。标签中的“文档”则表明给定的文件是一份文档资料,它可能是Twisted框架的官方...

    twsited官方开发入门手册

    - 探讨如何设计 Twisted 应用程序,使其具有良好的扩展性和维护性。 - **2.4.2 示例:Twisted Quotes** - 通过一个具体的示例来展示模块化设计的重要性。 **2.5 Twisted 从零开始,或 Finger 服务的演变** - **...

    twisted, vitualc++ 包

    而virtualc++在这里指的是Microsoft Visual C++,一个用于开发Windows应用程序的集成开发环境(IDE),特别是对于需要C++运行时库的Python扩展模块来说是必需的。 描述中提到“twisted 使用 python 3.5, 3.6 的资源...

    Python Twisted网络编程框架(中文)

    通过使用Twisted,开发人员可以快速构建复杂的网络服务,如Web服务器、聊天应用程序等。 #### 三、拒绝连接 文档中提到了一个简单的例子——`finger01.py`,该脚本仅启动了反应器`reactor.run()`。这段代码实际上并...

    twisted网络编程.txt

    Twisted 不仅提供了一个强大的网络编程框架,还支持广泛的网络协议和服务,使得开发者可以轻松地构建复杂的网络应用程序。通过掌握 Twisted 的核心概念和技术,可以有效地提高网络应用的性能和可靠性。无论是初学者...

Global site tag (gtag.js) - Google Analytics