`

使用Twisted Application 框架

阅读更多

翻译by:pako

email/gtalk:zealzpc@gtalk.com

目标:

 

介绍twisted Application 结构

介绍如何使用.tac文件和twistd部署twisted application

介绍twisted services

 

 

 

概要

 

Twisted application框架负责启动和停止你的应用程序。使用application框架中已经实现了的那些工具可以使你方便的实现 daemo,logging,选择一个reactor等功能,而不用为此再做那些枯燥的工作。

 

 

Twisted applications 最主要的工具是一个命令行的组件叫twistd。Twistd 实现了跨平台,在运行Twisted applications时强烈推荐使用它。

 

Twisted Application 框架最重要的组件就是 twisted.application.service.Application类,代表了你的应用程序。当然,Application类不会提供所有你想实现的功能。事实上,Application类更像一个services的容器,里面可以包容若干个service。你所要做的就是用过Application这个框架来实现里面的一个个services。

 

对于“service”,我们是指那些可以启动和停止的程序。通常来说service包括web servers ,FTP servers,和ssh 客户端。你的Application对象可以容纳许多service,通过IServiceCollections类甚至可以是一个有结构层次的service。

 

下面是一个简单的Application结构例子,它实现了一个echo tcp服务跑在7001端口上。

 

 

 from twisted.application import internet, service
 from somemodule import EchoFactory
 port = 7001
 factory = EchoFactory()
 
 # 下面是最重要的一行,没有Application类,就无法欲行
 application = service.Application("echo")  # 创建Application对象
 echoService = internet.TCPServer(port, factory) # 创建echo 服务
 # 将echo服务放置到application里面
echoService.setServiceParent(application)
 

 

 

 

这个简单的例子的结构:

 

   application

   |

   `- echoService

 

更复杂的层次结构可以通过IServiceCollection来实现。你将会喜欢上这样去管理一个依赖其他服务的服务。比如,一个Twisted Application代理希望他的服务总是在相应的客户端启动后启动。

 

 

 

使用Application

twistd and tac

twistd和tac文件

 

对于处理启动和配置你的Twisted application,Twisted Application框架使用.tac文件。.tac文件也是python文件,它

 

下面这个简单的例子是一个.tac文件

 

 

"""
This is an example .tac file which starts a webserver on port 8080 and
serves files from the current working directory.

The important part of this, the part that makes it a .tac file, is
the final root-level section, which sets up the object called 'application'
which twistd will look for
"""

import os
from twisted.application import service, internet
from twisted.web import static, server

def getWebService():
    """
    Return a service suitable for creating an application object.

    This service is a simple web server that serves files on port 8080 from
    underneath the current working directory.
    """

    #创建一个resource对象,用来服务静态文件
    fileServer = server.Site(static.File(os.getcwd()))
    return internet.TCPServer(8080, fileServer)

# this is the core part of any tac file, the creation of the root-level
# application object
application = service.Application("Demo application")

# attach the service to its parent application
service = getWebService()
service.setServiceParent(application)
 

 

 

#你可以用过 twistd -ny service.tac 运行这个文件

 

 

Twistd是一个用来执行 Twisted applications 的.tac文件的程序。运行它最简单的方式是 通过twistd 命令 加变量 -y 和一个tac文件名。比如你可以运行上面的server通过 twistd -y service.tac 命令。

 

在tac应用中定制 twistd 日志

 

定制日志的行为可以在.tac文件中通过api来访问。ILogObserver组件可以被设置在一个Application中,提供给twistd使用。

 

下面是如何使用DailyLogFile的例子,它会每天记录一次。

 

 

from twisted.application.service import Application
from twisted.python.log import ILogObserver, FileLogObserver
from twisted.python.logfile import DailyLogFile

application = Application("myapp")
logfile = DailyLogFile("my.log", "/tmp")
application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
 

 

 

invoking twistd -y my.tac will create a log file at /tmp/my.log.

 

执行 twistd -y my.tac命令时会创建一个日志文件/tmp/my.log。

 

Twisted 提供的service

 

Twisted提供了一些你可能需要的service

 

每一个Twisted提供了的service(TimerService除外)都会有 connect 或 listen方法在reactor里,并且这些service和reactor都使用一样的方法。

 

connect方法是提供给客户端使用,listen方法提供给服务端。比如,TCPServer相应的使用 reactor.listenTCP监听客户端的连接 而 TCPClient使用 reactor.connectTCP去连接服务器端。

 

 

TCPServer

TCPClient

Services which allow you to make connections and listen for connections on TCP ports.

listenTCP

connectTCP

 

允许你在TCP端口上连接和监听连接。

UNIXServer

UNIXClient

Services which listen and make connections over UNIX sockets.

listenUNIX

connectUNIX

一个通过UNIX sockets 连接和监听连接的service。

 

SSLServer

SSLClient

Services which allow you to make SSL connections and run SSL servers.

listenSSL

connectSSL

一个通过SSL 连接和监听连接的service。

 

UDPServer

UDPClient

Services which allow you to send and receive data over UDP

listenUDP

允许你通过UDP发送和接受数据。

 

UNIXDatagramServer

UNIXDatagramClient

Services which send and receive data over UNIX datagram sockets.

listenUNIXDatagram

connectUNIXDatagram

允许你通过UNIX datagram sockets发送和接受数据。

 

MulticastServer

A server for UDP socket methods that support multicast.

listenMulticast

一个UDP socket service,支持多点广播。

 

TimerService

A service to periodically call a function.

一个server周期性的执行一个方法。

 

IServiceCollection 对象里面包含着IService对象(上面提到的都是 IService对象)。IService可以被添加到IServiceCollection对象中 通过setServiceParent方法,通过disownServiceParent去除一个IService对象。

 

 

 

from twisted.application import internet, service
from twisted.names import server, dns, hosts

port = 53

# Create a MultiService, and hook up a TCPServer and a UDPServer to it as
# children.
dnsService = service.MultiService()
hostsResolver = hosts.Resolver('/etc/hosts')
tcpFactory = server.DNSServerFactory([hostsResolver])
internet.TCPServer(port, tcpFactory).setServiceParent(dnsService)
udpFactory = dns.DNSDatagramProtocol(tcpFactory)
internet.UDPServer(port, udpFactory).setServiceParent(dnsService)

# Create an application as normal
application = service.Application("DNSExample")

# Connect our MultiService to the application, just like a normal service.
dnsService.setServiceParent(application)
 

 

 

 

 

 

分享到:
评论

相关推荐

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

    本文通过对Twisted框架的介绍及其核心组件的理解,结合具体示例代码,帮助读者深入了解Twisted的基本使用方法和核心概念。通过掌握这些知识点,开发者可以更好地利用Twisted来构建高效的网络应用。

    twisted 语法 pdf

    在这个过程中,读者可以学习到如何使用Twisted的各种特性,如`Deferred`、`Service`、`Application`等。 ### 四、添加更多特性 在构建了基本的Finger服务之后,文档进一步介绍如何添加更多的特性,如本地用户设置...

    Twisted-20.3.0-cp39-cp39-win_amd64.whl

    5. **Scrapy与Twisted的关系**:Scrapy是一个强大的Python爬虫框架,它基于Twisted进行构建,利用其异步I/O和网络处理能力,实现高效的网络爬取。在安装Scrapy之前,如果系统没有预先安装Twisted,那么通常需要先...

    MINA、Netty、Twisted放在一起学

    MINA、Netty和Twisted是三个备受瞩目的开源通讯框架,它们各自拥有独特的特性和优势,广泛应用于高性能、高并发的网络应用中。本文将结合一系列的学习文档,深入探讨这三大框架的使用方法和技术细节。 首先,我们来...

    Twisted document

    为了更好地管理和配置服务,可以使用 Twisted 的 Application 框架。 **2.5.11 使用 twistd** 使用 twistd 工具来启动服务,该工具提供了更多的选项和灵活性。 **2.6.1 添加新功能** 随着服务的逐渐成熟,可以考虑...

    The Twisted Documentation-20120213.pdf

    - **使用Application**: 将服务集成到更大的应用程序中。 - **twistd**: 使用Twisted自带的工具来启动服务。 #### 4. **添加特性到Finger服务** - **添加本地用户设置消息功能**。 - **使用服务来管理依赖关系**...

    Python库 | Twisted-16.4.1-cp27-none-win_amd64.whl

    Twisted是一个开源的Python网络编程框架,专注于异步事件驱动的网络编程和应用开发。它为开发复杂的、高性能的互联网协议服务器和客户端提供了全面的基础设施。Twisted支持多种网络协议,包括TCP、UDP、HTTP、FTP、...

    CoAPthon3:CoAPthon3是我CoAPthon库的python3的移植。 CoAPthon3是符合RFC的CoAP协议的python3库。 分支可用于Twisted框架

    5. **异步编程**:如果使用Twisted框架,可以通过其异步I/O模型处理并发请求,提高系统效率。 **应用领域** CoAPthon3广泛应用于智能家居、智能城市、工业自动化、环境监测等领域,它可以轻松地连接到各种IoT设备...

    autobahn-python:Python中的WebSocket和WAMP用于Twisted和asyncio

    asyncio与Twisted相比,更易于理解和使用,且与Python标准库更好地集成。 **autobahn-python库的功能:** - 提供WebSocket服务器和客户端实现,支持RFC 6455标准。 - 实现了WAMP v1和v2版本,支持发布/订阅和远程...

    twsited官方开发入门手册

    - 使用 Twisted 的 `Service` 和 `Application` 来管理服务。 - **2.6.13 使用 twistd** - 使用 Twisted 的命令行工具 `twistd` 来启动服务。 - **2.7.1 介绍** - 继续添加新特性到 Finger 服务。 - **2.7.2 由...

    Python库 | autobahn-17.6.2.tar.gz

    基于Twisted框架,Autobahn提供了强大的异步编程模型。这使得在处理大量并发连接时,系统性能得到保障,同时降低了资源消耗。 4. 测试工具和框架: Autobahn还提供了一套完整的测试工具和测试框架,可以对...

    tornado官方翻译文档

    13. asyncio和Twisted框架的桥梁:tornado.platform.asyncio和***isted模块分别提供了Tornado与asyncio以及Twisted框架间的桥梁。 14. 开发工具:tornado.autoreload、tornado.log、tornado.options等模块提供了实用...

    PyPI 官网下载 | autobahn-18.11.1.tar.gz

    这使得`autobahn` 可以无缝集成到使用这两种框架的项目中。 **使用步骤** 1. **解压**: 首先,你需要解压 `autobahn-18.11.1.tar.gz` 文件,使用 `tar` 命令(在Unix/Linux系统)或类似7-Zip的工具(在Windows系统...

    Asynchronous C++ Application framework-开源

    异步C++应用程序框架——Asycxx,是一个用于构建联网应用的开源库,它借鉴了Twisted项目的设计理念。在C++的世界里,异步编程是处理I/O密集型任务和高并发场景的一种高效手段,因为这种方式允许程序在等待I/O操作...

    python-application:对于python编写的所有应用程序

    2. `tests`目录:存放测试用例,使用上述提到的测试框架编写。 3. `requirements.txt`:列出项目依赖的Python库及其版本。 4. `setup.py`:用于安装和打包Python项目的配置文件。 5. `README.md`或`README.rst`:...

    Python库 | autobahn-19.8.1-py2.py3-none-any.whl

    Twisted 是一个成熟的网络应用框架,适合构建复杂的、高性能的异步服务。asyncio 是Python标准库的一部分,从Python 3.4开始引入,提供了一种更现代、更简洁的方式来编写异步代码。`autobahn` 可以与两者兼容,允许...

    tornado 4.0.1 python framework guide

    `tornado.platform.twisted` 模块提供了一个桥接模块,使得 Tornado 可以与 Twisted 框架协同工作。这对于需要同时使用这两个框架的开发者来说非常有用。 **4.5 tornado.websocket — 与浏览器进行双向通信** `...

    快速异步PythonWeb服务器基于libev

    本篇文章将深入探讨基于libev库的Python Web服务器的实现原理、特性以及如何使用它们,特别是fapws3项目,这是一个与Medusa、Twisted、Apricot和Fapws类似的高性能异步WSGI服务器。 libev是一个事件库,提供了一种...

Global site tag (gtag.js) - Google Analytics