(最近忙,发点旧文凑数-_-|||,这是三月份试用Twisted时记的一点笔记)
Twisted是一个功能极为强大的异步网络应用开发库——当然是Python的。印象中大概也就只有ACE有这么强悍,但Twisted在易用性方面要好很多——这其中当然少不了Python的功劳(ACE是用C++的)。
但Python也有其缺点,其中之一就是因为GIL的存在使得用Python写多线程应用的意义不大,那么对于像Twisted这样基于Reactor模式实现的单一Event Loop的应用开发环境来说,就有一点局限:整个应用(或者说整个进程)都必须围绕着reactor来。这样的话做一些纯后端的应用是没什么问题,比如像网页爬虫(Scrapy就是基于Twsited的)一类的应用。但这显然不够,很多应用还是需要有前端界面的——比如像BT、电驴这样的下载工具。MLDonkey采用的方法就是提供一个WEB的管理界面来与用户交互——当然,MLDonkey并不是用Python开发的。
这是一个很好的思路。所以Twisted提供了一套WEB开发环境以实现这样的目的。
关于twisted.web部分的开发,官方的文档
显得太过于简单了,特别是连基本的request对象的参考文档都没有。还好gashero整理了一部分在《Twisted的WEB开发
》,引用一下(有补充):
channel :包含上级的HTTP协议对象。
transport :通信对象。
method :HTTP方法,如GET和POST。
uri :全部请求的URI。
path :具体的请求路径,不含参数。
args :请求参数,包括URL参数和POST参数。格式如 {’key’:[’val1′,’val2′],} 。
received_headers :请求报文的头字段。
received_cookies :请求报文的cookie。
content :请求报文的实体主体,文件对象。
clientproto :发出请求的客户端的HTTP版本。
client :请求的客户端地址对象,包括type、host和port属性,分别记录协议(这里固定为TCP)、IP和端口号
host :本机接收请求的地址对象
getHeader(key) :获取请求的头字段。
getCookie(key) :获取请求的cookie。
getAllHeaders() :所有请求的头字段字典,就是返回received_headers。
getRequestHostname() :请求的host字段,不含端口号。
getHost() :原始请求的通信地址,返回host。
getClientIP() :获取客户端IP。
getUser() :获取basic验证中的用户名。
getPassword() :获取basic验证中的密码。
getClient() :获取客户端地址对象
一个最基本的Web应用如下:
然后运行起来就可以通过URL:http://localhost:8080 访问这个程序的页面了。
注意其中的的isLeaf是必须的。不过也还有另一种方法可以实现同样的功能:
这个方法好理解,就是把这个对象挂到请求链接的根目录上。以此类推就可以实现带子目录请求的页面:
现在可以通过URL:http://localhost:8080/child 访问这个子页面了。不过生成子页面还有一个动态的办法:
现在可以试试URL:http://localhost:8080/1234 访问了。其中1234可以换成任何数字(实际上上面的程序对此未作限制,即使输入任何字符也是可以的)。
接下来是静态内容的使用:
访问一下URL:http://localhost:8080/static 试试就知道了。
这些对于Web开发都是些基本的功能,稍微复杂一点的网页要做起来还是很痛苦的。但是Python是很灵活的东西,资源也很丰富,所以实际上问题也不大。比如在getChild方法里加上routing的实现,再加一个mako一类的模板,功能立即强大很多(貌似搞得像Pylons了)——只是数据库操作还是需要谨慎一些,简单地加上SQLAlchemy之类的ORM也不是不行,但是它对数据库的访问是阻塞式的,可能导致Twisted应用的性能下降很大。
所幸的是一般来说为Twisted应用增加Web交互界面很少还有需要操作数据库的,即使必须要有,Twisted也提供了异步的数据库访问接口——虽然功能不可能像SQLAlchemy那么强大,对于简单的应用应该也足够了。
虽然WEB界面已经很方便了,但也许还会有人想要用交互式GUI,这也没问题。Twisted的Web库提供了对XMLRPC和SOAP的支持。以简单一些的XMLRPC为例:
客户端的调用方式是:
上面的代码执行后将回显。
实际上XMLRPC对象也是一种Resource,所以也可以简单地用putChild放到子目录下去。或者如果需要对xmlrpc的request进行控制——比如增加authentication或者其它的客户端调用限制,可以在_cbRender方法里实现,具体可参考web.xmlrpc的源码。
关于用Twisted进行Web开发的更多内容请参考官方文档和源码。
分享到:
相关推荐
本文实例讲述了Python基于twisted实现简单的web服务器,分享给大家供大家参考。具体方法如下: 1. 新建htm文件夹,在这个文件夹中放入显示的网页文件 2. 在htm文件夹的同级目录下,建立web.py,web.py的内容为: from ...
《Python高效开发实战——Django、Tornado、Flask、Twisted》内容精练、重点突出、实例丰富、讲解通俗,是广大网络应用设计和开发人员不可多得的一本参考书,同时非常适合大中专院校师生学习和阅读,也可作为高等...
Python高效开发实战+Django+Tornado+Flask+Twisted源代码 Python高效开发实战+Django+Tornado+Flask+Twisted源代码 Python高效开发实战+Django+Tornado+Flask+Twisted源代码
Python高效开发实战 Django Tornado Flask Twisted, 中文版,完整版,带书签目录。
四种主流的Python Web开发框架,零基础完成网站搭建、数据库设计、前后端开发,全方位领悟Python原理与应用
Twisted是用于Internet应用程序的基于事件的框架,支持Python 2.7和Python 3.5+。它包括用于许多不同目的的模块,其中包括: twisted.web:HTTP客户端和服务器,HTML模板和WSGI服务器 twisted.conch:SSHv2和...
Python高效开发实战具体内容有Django、Tornado、Flask以及Twisted所包含的内容
第一部分:Twisted理论基础 第二部分:异步编程初探与reactor模式 第三部分:初步认识Twisted 第四部分:由Twisted支持的诗歌客户端 第一个twisted支持的诗歌服务器 第一滴心血 第五部分:由Twisted支持的诗歌...
Python高效开发实战——Django、Tornado、Flask、Twisted 本书源代码 Python高效开发 实战 也许你听说过全栈工程师,他们善于设计系统架构,精通数据库建模、通用网络协议、后端并发处理、前端界面设计,在学术研究...
详细整理出基于PYTHON的twisted的函数声明及介绍,对于python的网络编程有很大用处
Construct HTTP servers with Twisted’s high-level web APIs Use the Agent API to develop flexible web clients Configure and deploy Twisted services in a robust and standardized fashion Access databases...
最新twisted是python面向实时通信的应用框架,支持python3,希望做硬件开发、控制的有关人员喜欢
使用twisted开发的游戏服务器端,客户端为unity3d,请结合使用
如果你在学习python,你在找一本学习的书进行更深入学习,我推荐大学学习《Python高效开发实战:Django、Tornado、Flask、Twisted》_sample.pdf,
Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常艰难,他们迫切地需要一个可扩展性高、基于事件驱动、跨平台的网络开发框架,为此他们决定自己实现一个,并从那些之前的游戏和网络应用程序的开发者中...
Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常艰难,他们迫切地需要一个可扩展性高、基于事件驱动、跨平台的网络开发框架,为此他们决定自己实现一个,并从那些之前的游戏和网络应用程序的开发者中...
Twisted is an event-driven network programming framework written in Python and licensed under the MIT License. Twisted projects variously support TCP, UDP, SSL/TLS, IP Multicast, Unix domain sockets,...
Twisted Info Twisted入门教程源码
Python高效开发实战:Django、Tornado、Flask、Twisted 随书源代码
Python高效开发实战——Django、Tornado、Flask、Twisted一书分为三部分:第1部分是基础篇,带领初学者实践Python开发环境和掌握基本语法,同时对网络协议、Web客户端技术、数据库建模编程等网络编程基础深入浅出地...