1. HelloWorld示例
本专栏会从HelloWorld示例出发,基于tornado5.1版本代码介绍tornado异步web框架的流程和实现。
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8888, help="run on the given port", type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") def main(): # 解析启动命令 tornado.options.parse_command_line() # 创建Application示例 application = tornado.web.Application([ (r"/", MainHandler), ]) # 创建HTTPServer实例 http_server = tornado.httpserver.HTTPServer(application) # 监听端口,创建服务器socket http_server.listen(options.port) # 获取IOLoop并启动 tornado.ioloop.IOLoop.current().start() if __name__ == "__main__": main()
复制
2. Tornado 源码文件介绍
2.1 Tornado源码文件树
tornado-5.1 ├── __init__.py ├── _locale_data.py ├── auth.py ├── autoreload.py ├── concurrent.py ├── curl_httpclient.py ├── escape.py ├── gen.py ├── http1connection.py ├── httpclient.py ├── httpserver.py ├── httputil.py ├── ioloop.py ├── iostream.py ├── locale.py ├── locks.py ├── log.py ├── netutil.py ├── options.py ├── platform │ ├── __init__.py │ ├── asyncio.py │ ├── auto.py │ ├── auto.pyi │ ├── caresresolver.py │ ├── common.py │ ├── epoll.py │ ├── interface.py │ ├── kqueue.py │ ├── posix.py │ ├── select.py │ ├── twisted.py │ └── windows.py ├── process.py ├── queues.py ├── routing.py ├── simple_httpclient.py ├── speedups.c ├── speedups.pyi ├── stack_context.py ├── tcpclient.py ├── tcpserver.py ├── template.py ├── testing.py ├── util.py ├── web.py ├── websocket.py └── wsgi.py
复制
2.2 Tornado模块介绍
重点介绍一些常用的模块。
2.2.1. 核心web框架
tornado.web
web框架主要功能实现,主要包含RequestHandler和Application两个非常重要的类tornado.httpserver
非阻塞式的HTTP服务器实现,主要是HTTPServer类tornado.template
模板系统tornado.escape
HTML, JSON, URLs等的编码和解码操作tornado.routing
路由相关匹配实现
2.2.2. 异步网络IO底层实现
tornado.ioloop
核心的I/O事件循环,IOLoop类tornado.iostream
非阻塞式socket中IO的读写操作,主要是IOStream和SSLIOStream两个类tornado.httpclient
主要是非阻塞式的HTTP客户端实现tornado.netutil
主要一些网络工具函数的封装,主要是创建socket的连接以及注册socket文件句柄到IOLoop中tornado.tcpserver
非阻塞式,单线程的TCP服务器实现tornado.tcpclient
非阻塞式的TCP客户端实现
2.2.3. HTTP协议1.x底层实现
tornado.http1connection
HTTP 1.x协议相关实现tornado.httputil
对HTTP协议请求中的内容进行解析,包含Header和Body
2.2.4. 异步IO模型
tornado.platform.epoll
Linux系统I/O多路复用epoll模型 5.x之前默认的事件循环模型tornado.platform.select
Linux系统I/O多路复用select模型tornado.platform.kqueue
I/O对路复用kqueue,一般mac操作系统tornado.platform.asyncio
异步IO模型,5.x之后将asyncio作为默认的事件循环模型,需要python3.4+以上支持
2.2.5. 其余服务集成
tornado.auth
使用OpenId和OAuth进行第三方登录tornado.platform.twisted
在Tornado上运行为Twisted实现的代码tornado.websocket
实现和浏览器的双向通信tornado.wsgi
与其他python网络框架/服务器的相互操作
2.2.6. 工具相关
tornado.concurrent
异步Future对象的封装,获取异步结果的相关操作tornado.gen
一个基于生成器的接口,使用该模块保证代码异步运行tornado.options
解析终端参数tornado.process
多进程实现的封装tornado.stack_context
用于异步环境中对回调函数的上下文保存、异常处理tornado.testing
单元测试,包括异步HTTPServer 和 IOLoop 相关测试tornado.autoreload
生产环境中自动检查代码更新
下一篇则介绍Tornado的设计模型和划重点看那些代码文件。