• web框架--tornado框架之初识


    在python中常见的web框架构建模式有以下两种:

    • *MVC框架: *
    • 数据库相关操作的Models
    • 视图文件的Views
    • 业务逻辑的Controllers
    • MTV框架:
    • 数据库相关操作的Models
    • 模板文件Templates
    • 业务逻辑的Views

    一、初识tornado

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

    经典的hello world 案例:tornado内部已经帮我们实现socket。

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 import tornado.ioloop
     4 import tornado.web
     5  
     6 class MainHandler(tornado.web.RequestHandler):
     7     def get(self):
     8         self.write("Hello, world")
     9  
    10 application = tornado.web.Application([
    11     (r"/index", MainHandler),
    12 ])
    13  
    14 if __name__ == "__main__":
    15     application.listen(8888)
    16     tornado.ioloop.IOLoop.instance().start()

    第一步:执行脚本,监听 8888端口

    第二步:浏览器客户端访问 /index  -->  http://127.0.0.1:8888/index

    第三步:服务器接受请求,并交由对应的类处理该请求

    第四步:类接受到请求之后,根据请求方式(post / get / delete ...)的不同调用并执行相应的方法

    第五步:然后将类的方法返回给浏览器

      整个过程其实就是在创建一个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请求和响应。

    二、tornado等待请求阶段详解

    tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分:

    1)启动程序阶段,又称为待请求阶段

    2)接收并处理客户端请求阶段

    简而言之:

    1、在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestHandler,从而让XXRequestHandler来处理指定url发送的请求);第二步,创建服务器socket对象并添加到epoll中;第三步,创建无线循环去监听epoll。

    2、在接收并处理请求阶段,第一步,接收客户端socket发送的请求(socket.accept);第二步,从请求中获取请求头信息,再然后根据请求头中的请求url去匹配某个XXRequestHandler;第三步,匹配成功的XXRequestHandler处理请求;第四步,将处理后的请求发送给客户端;第五步,关闭客户端socket。

  • 相关阅读:
    localstorage 过期时间
    windows计划任务后台运行,windows定时任务去掉黑窗口xp,win7, win10,server2008,server2012,server2016都行
    kettle定时调度,使用Windows任务计划器a
    介绍一个”牛逼闪闪”开源库:janetfilter
    Kettle_使用Pan.bat执行转换、Kitchen.bat执行作业
    IDEA2020.2创建springboot项目卡死在reading maven project的问题
    Css中的“.”,“#”,”*“的区别和作用
    尝试在 Red Hat 6.5 中安装 Docker(CentOS 6.5 应该也类似)
    如何制作 SQL*Plus 的 docker 镜像
    使用 sqlplus 批量导出 sql 数据插入脚本
  • 原文地址:https://www.cnblogs.com/june-L/p/11992006.html
Copyright © 2020-2023  润新知