第一篇:白话tornado源码之一个脚本引发的血案

简介:

本系列博文计划:

  1、剖析基于Python的Web框架Tornado的源码

  2、为Python开发一个完善的MVC框架  

  首先将带着大家一起来剖析基于python编写的Web框架 tornado ,本着易读易懂的目标来写这一系列,寄希让小白也能zeng明白其中的道理,与其说剖析还不如说是白话,因为本系列都会用通俗的语言去描述Web框架中的各个知识点。

一个脚本引发的一场“血案”.... 

运行脚本并在浏览器上访问http://127.0.0.1:8080

注意:对于上述的demo来说,我们没有对请求做分析,对所有的请求都做了相同的处理。

上述分析:

  1、浏览器其实就是一个socket客户端,而web应用其实就是一个socket服务端,并且web应用在服务器上一直在监听某个端口。

  2、当浏览器请求某个web应用时,需要指定服务器的IP(DNS解析)和端口建立一个socket连接。

  3、建立链接后,web应用根据请求的不同,给用户返回相应的数据。

  4、断开socket连接。(之所以说http是短链接,其实就是因为每次请求完成后,服务器就会断开socket链接)

  对于Web框架来说,一般分为两类,其中一类则是包含上述 4部分 内容的框架,另外一类就是只包含 第3部分 功能的框架。tornado就是一中属于前者的框架。tornado 是一个基于 Python 开发的web框架,较其他 Web 框架的区别是:采用了非阻塞的方式和对epoll的应用。这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。

初识tornado

  上述用一个简陋的demo展示了Web请求从浏览器到服务器之间的流程,接下来就以上帝视角来对tornado框架做一个全局的介绍。在使用tornado之前需要安装,对于如何安装这里不做太多赘述,详见官网

经典的hello world 案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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并监听端口
  • 处理请求阶段,即:当有客户端连接时,接受请求,并根据请求的不同做出相应的相应

那么在记下来的博文中将按照这两种分类来进行剖析...



本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/p/4375445.html,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
XML Java 数据格式
HUTOOL-Word生成-Word07Writer
HUTOOL-Word生成-Word07Writer
|
开发框架 人工智能 数据可视化
报表工具:常见的五款BI报表介绍
Power BI是微软官方推出的数据分析和可视化工具。
报表工具:常见的五款BI报表介绍
|
6月前
|
智能设计 人工智能 物联网
2024世界工业设计大会:阿里云智能设计部荣获中国设计产业100强三项大奖,并加入中国工业设计协会智能设计专业委员会
2024世界工业设计大会:阿里云智能设计部荣获中国设计产业100强三项大奖,并加入中国工业设计协会智能设计专业委员会
|
11月前
|
关系型数据库 MySQL 数据库
vertx 的http服务表单提交与mysql验证
本文介绍了如何使用Vert.x处理HTTP服务中的表单提交,并通过集成MySQL数据库进行验证,包括项目依赖配置、表单HTML代码和完整的Vert.x服务代码。
101 2
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
194 3
|
机器学习/深度学习 人工智能 安全
探索未来:人工智能在后端开发中的应用前景
【2月更文挑战第5天】随着人工智能技术的不断进步,后端开发领域也迎来了新的机遇与挑战。本文将探讨人工智能在后端开发中的应用前景,从数据处理、系统优化到安全性保障等方面展开讨论,展望未来人工智能与后端开发的紧密结合将为我们带来怎样的变革。
|
程序员 Linux
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(三)
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构
270 0
|
Oracle 关系型数据库
Oracle查询优化-在字符串删除特定字符
【2月更文挑战第4天】【2月更文挑战第8篇】比较灵活,列举三个常见的方式
802 0