![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tornado源码解析
文章平均质量分 77
小煤矿屁
游戏后端出身的算法工程师,目前从事机器学习相关的研发,技术栈:统计机器学习,spark ML,c++,python
展开
-
1.读懂tornado的预备知识:什么是epoll
问:epoll 或者 kqueue 的原理是什么?为什么 epoll 和 kqueue 可以用基于事件的方式,单线程的实现并发?我没看过 linux 内核,对这方面一直有疑问……必须从很多基础的概念开始构建这个答案,并且可能引申到很多别的问题。首先我们来定义流的概念,一个流可以是文件,socket,pipe 等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我转载 2016-05-29 13:28:33 · 2171 阅读 · 0 评论 -
14.Tornado高性能的秘密:ioloop对象分析 (副标题:IOLoop是个事件循环)
网上都说nginx和lighthttpd是高性能web服务器,而tornado也是著名的高抗负载应用,它们间有什么相似处呢?上节提到的ioloop对象是如何循环的呢?往下看。首先关于TCP服务器的开发上节已经提过,很明显那个三段式的示例是个效率很低的(因为只有一个连接被端开新连接才能被接受)。要想开发高性能的服务器,就得在这accept上下功夫。首先,新连接的到来一般是经典的三次握转载 2016-05-29 15:30:52 · 1537 阅读 · 0 评论 -
13.从代码分析TCPServer类的机制 (副标题:create-bind-listen)
接上面一小节,开始看 TCPServer的 code。TCPServer的__init__函数很简单,仅保存了参数而已。唯一要注意的是,它可以接受一个io_loop为参数。实际上io_loop对TCPServer来说并不是可有可无,它是必须的。不过TCPServer提供了多种渠道来与一个io_loop绑定,初始化参数只是其中一种绑定方式而已。listen接下来我们看转载 2016-05-29 15:29:13 · 690 阅读 · 0 评论 -
12.Tornado TCPServer类的设计解读 (副标题: 一个通用的server框架)
前文已经说过,HTTPServer是派生自TCPServer,从协议层次上讲,这再自然不过。从TCPServer的实现上看,它是一个通用的server框架,基本是按照BSD socket的思想设计的。create-bind-listen三段式一个都不少。从helloworld.py往下追,可以看到:helloworld.py中的main函数创建了HTTPServer.转载 2016-05-29 15:21:42 · 1036 阅读 · 0 评论 -
11.Tornado在TCP层里的工作机制---TCP层的实现
上一节(HTTP总结)是关于应用层的协议 HTTP,它依赖于传输层协议 TCP,例如服务器是如何绑定端口的?HTTP 服务器的 handle_stream 是在什么时候被调用的呢?本节聚焦在 TCP 层次的实现,以便和上节的程序流程衔接起来。首先是关于 TCP 协议。这是一个面向连接的可靠交付的协议。由于是面向连接,所以在服务器端需要分配内存来记忆客户端连接,同样客户端也需要记录服转载 2016-05-29 15:16:16 · 552 阅读 · 0 评论 -
10.HTTP层:HTTPRequest,HTTPServer与HTTPConnection---HTTP层的实现
前面小节在分析 handler 时提到,handler 的读写实际是依靠 httprequest 来完成的。今天就分析 tornado 在 HTTP 这一层上的实现,类包括 HTTPRequest, HTTPServer 和 HTTPConnection.首先,HTTP协议是建立在面向连接的可靠连接协议 TCP 协议之上,是应用层协议,亦即它的协议内容会涉及网络业务逻辑,而与网络连接处转载 2016-05-29 15:12:54 · 1003 阅读 · 0 评论 -
8.RequestHandler的分析---handler是如何工作的
前面一小节谈到了Application 类,这里再来看看RequestHandler类。从上一节的流程可以看出,RequestHandler 类把 _execute 方法暴露给了 application 对象,在这个方法里完成了请求的具体分发和处理。因此,我主要看这一方法(当然还包括__init__),其它方法在开发应用时自然会用到,还是比较实用的,比如header,cookie,get/转载 2016-05-29 15:06:45 · 3099 阅读 · 0 评论 -
5.Tornado HTTP服务器的基本流程---Tornado底层I/O的内部实现
本小节介绍Tornado HTTP服务器的基本流程,分别分析httpserver, ioloop, iostream模块的代码来剖析Tornado底层I/O的内部实现。httpserver.py中给出了一个简单的http服务器的demo,代码如下所示:01from tornado import httpserver转载 2016-05-29 14:25:33 · 3179 阅读 · 0 评论 -
7.Application对象的接口与起到的作用---Application对象工作机制
前面小节谈到了Tornado的RequestHandler和Application类,这两块内容还很多,分开来再补充一下,这篇先谈谈Application类。总的来说,Application对象提供如下几个接口:__init__ 接受路由-处理器列表,制定路由转发规则listen 建立服务器并监听端口,是对httpserver的封装调用add_handlers 添加路由转载 2016-05-29 14:46:01 · 698 阅读 · 0 评论 -
21.番外篇:Tornado的多进程管理分析---process.py代码解读
Tornado的多进程管理我们可以参看process.py这个文件。在编写多进程的时候我们一般都用python自带的multiprocessing,使用方法和threading基本一致,只需要继承里面的Process类以后就可以编写多进程程序了,这次我们看看tornado是如何实现他的multiprocessing,可以说实现的功能不多,但是更加简单高效。我们只看fork_proc转载 2016-05-29 14:32:32 · 2169 阅读 · 0 评论 -
6.Tornado RequestHandler和Application类---了解web.py文件
前面一小节提到了需要了解 web.py 这个文件,这个文件最关键的地方是定义了 Application 和 RequestHandler 类。我们再看看 Tornado 的 Hello World,我们再精简一下,下面是最简单的实例化并启动 Application的方式:1import ioloop2impo转载 2016-05-29 14:35:02 · 493 阅读 · 0 评论 -
4.Tornado源码必须要读的几个核心文件----了解Tornado的大致工作机制
前面我们看了一些关于 Tornado 的总体框架设计图,还有一些模块设计。比如3.大概了解Tornado框架的设计模型 里面的文件组织,真的不少,那么我们应该具体去读哪几个文件呢?为了方便,约定$root指带tornado的根目录。总的来说,要用tornado完成一个网站的构建,其实主要需要以下几个文件:$root/tornado/web.py$root/tornado转载 2016-05-29 14:16:14 · 821 阅读 · 0 评论 -
3.大概了解Tornado框架的设计模型
Tornado框架设计模型从上面的图可以看出,Tornado 不仅仅是一个WEB框架,它还完整地实现了HTTP服务器和客户端,在此基础上提供WEB服务。它可以分为四层:最底层的EVENT层处理IO事件;TCP层实现了TCP服务器,负责数据传输;HTTP/HTTPS层基于HTTP协议实现了HTTP服务器和客户端;最上层为WEB框架,包含了处理器、模板、数据库连接、认证翻译 2016-05-29 13:34:07 · 2210 阅读 · 1 评论 -
2.开始Tornado的源码分析之旅
Tornado 是由 Facebook 开源的一个服务器“套装”,适合于做 python 的 web 或者使用其本身提供的可扩展的功能,完成了不完整的 wsgi 协议,可用于做快速的 web 开发,封装了 epoll 性能较好。文章主要以分析 tornado 的网络部分即异步事件处理与上层的 IOstream 类提供的异步IO,其他的模块如 web 的 tornado.web 以后慢慢留作分析。转载 2016-05-29 13:31:23 · 587 阅读 · 0 评论 -
9.Tornado的核心web框架tornado.web小结---RequestHandler和Application
Tornado的web框架(tornado.web)在web.py中实现,主要包括RequestHandler类(本质为对http请求处理的封装)和Application类(是一些列请求处理的集合,构成的一个web-application,源代码注释不翻译更容易理解:A collection of request handlers that make up a web application)。转载 2016-05-29 15:10:09 · 1688 阅读 · 0 评论