• [原]tornado源码分析系列(五)[HTTPServer 层]


    引言:第四章讲解的有些乱,主要是代码太长了,而且还是在一章就讲完了,所以我决定将IOStream上层的HTTPServer类分作几章来讲,不按照代码顺序

    在讲完了IOLoop和IOStream后就知道,第一次在监听套接口的时候需要用到IOLoop,然后创建一个IOStream对象,然后以后的IO操作都由IOStream对象完成

    所以在上层的HTTP协议处理中,tornado定义了一个HTTPConnection类

    这个类主要完成的工作就是完成对下,完成HTTP数据包的传输,对上层HTTPserver提供解析后的request对象

    那么他们之间的工作模式是怎样的呢

    看看Demo

            import httpserver
            import ioloop
    
            def handle_request(request):
               message = "You requested %s\n" % request.uri
               request.write("HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s" % (
                             len(message), message))
               request.finish()
    
            http_server = httpserver.HTTPServer(handle_request)
            http_server.listen(8888)
            ioloop.IOLoop.instance().start()
    

    这次我没有在Demo里面加注释,因为我觉得这样更清晰

    上面的代码是现在HTTP框架很传统的方式

    定义一个处理request 请求的回调函数,并完成自己HTTP数据包的构造,并发送出去

    过程很简单,首先是创建一个HTTPServer,然后加入自己的回调函数,当然这个回调函数可以不这么简单

    这里只是一个Demo,你甚至可以在 request对象中提取表单数据等

    启动监听端口8888并启动IOLoop

    然后在取得了一个HTTP请求之后,就会回调handle_request,其中在回调函数中的 request 就是由 HTTPConnection处理后的完整的

    HTTP层需要的数据,包括一些表单数据等

    好了,现在很清晰的知道了HTTP层总共有几个主要的类

    1.HTTPServer

    2.HTTPConnection

    3.HTTPRequest

    这三个类的功能总体上是这样

    总结:这个是很传统的处理方式,但是其中涉及的细节很多,怎样放置回调函数等

    在此HTTPServer之上,可以通过解析Request并加上一些其他更好的功能,组成一个真正的web框架

    此章只是在原理上对HTTPServer做一个分析,下一章将从源代码方面看整个设计过程

      

    文章属原创,转载请注明出处 联系作者: Email:zhangbolinux@sina.com QQ:513364476
  • 相关阅读:
    canvas-color的几种设置
    canvas-2lineCap.html
    canvas-2lineJoin.html
    canvas-0trasform.html
    总体、个体和简单随机样本
    大数定律
    切比雪夫不等式
    B1032. 挖掘机技术哪家强
    Array(数组)对象-->join() 方法
    Array(数组)对象-->shift() 方法
  • 原文地址:https://www.cnblogs.com/Bozh/p/2603963.html
Copyright © 2020-2023  润新知