暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[Tornado源码剖析] 代码结构

天澄技术杂谈 2019-02-23
613

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的设计模型和划重点看那些代码文件。


文章转载自天澄技术杂谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论