本系列博文计划:python
一、剖析基于Python的Web框架Tornado的源码web
二、为Python开发一个完善的MVC框架 正则表达式
首先将带着你们一块儿来剖析基于python编写的Web框架 tornado ,本着易读易懂的目标来写这一系列,寄希让小白也能zeng明白其中的道理,与其说剖析还不如说是白话,由于本系列都会用通俗的语言去描述Web框架中的各个知识点。浏览器
一个脚本引起的一场“血案”....
运行脚本并在浏览器上访问http://127.0.0.1:8080服务器
#!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8080)) sock.listen(5) while True: connection, address = sock.accept() handle_request(connection) connection.close() if __name__ == '__main__': main()
注意:对于上述的demo来讲,咱们没有对请求作分析,对全部的请求都作了相同的处理。app
上述分析:框架
一、浏览器其实就是一个socket客户端,而web应用其实就是一个socket服务端,而且web应用在服务器上一直在监听某个端口。socket
二、当浏览器请求某个web应用时,须要指定服务器的IP(DNS解析)和端口创建一个socket链接。函数
三、创建连接后,web应用根据请求的不一样,给用户返回相应的数据。tornado
四、断开socket链接。(之因此说http是短连接,其实就是由于每次请求完成后,服务器就会断开socket连接)
对于Web框架来讲,通常分为两类,其中一类则是包含上述 4部分 内容的框架,另一类就是只包含 第3部分 功能的框架。tornado就是一中属于前者的框架。tornado 是一个基于 Python 开发的web框架,较其余 Web 框架的区别是:采用了非阻塞的方式和对epoll的应用。这意味着对于实时 Web 服务来讲,Tornado 是一个理想的 Web 框架。
初识tornado
上述用一个简陋的demo展现了Web请求从浏览器到服务器之间的流程,接下来就以上帝视角来对tornado框架作一个全局的介绍。在使用tornado以前须要安装,对于如何安装这里不作太多赘述,详见官网
经典的hello world 案例:
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/index", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
运行该脚本,依次执行:
- 建立一个Application对象,并把一个正则表达式'/'和类名MainHandler传入构造函数:tornado.web.Application(...)
- 执行Application对象的listen(...)方法,即:application.listen(8888)
- 执行IOLoop类的类的 start() 方法,即:tornado.ioloop.IOLoop.instance().start()
整个过程其实就是在建立一个socket服务端并监听8888端口,当请求到来时,根据请求中的url和请求方式(post、get或put等)来指定相应的类中的方法来处理本次请求,在上述demo中只为url为http://127.0.0.1:8888/index的请求指定了处理类MainHandler(具体如何寻找见下文)。因此,在浏览器上访问:http://127.0.0.1:8888/index,则服务器给浏览器就会返回 Hello,world ,不然返回 404: Not Found(tornado内部定义的值), 即完成一次http请求和响应。
由上述分析,咱们将整个Web框架分为两大部分:
- 待请求阶段,即:建立服务端socket并监听端口
- 处理请求阶段,即:当有客户端链接时,接受请求,并根据请求的不一样作出相应的相应
那么在记下来的博文中将按照这两种分类来进行剖析...