zoukankan      html  css  js  c++  java
  • [原]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
  • 相关阅读:
    TV
    [转载]如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧
    search result
    floating-camera
    HDU 1032.The 3n + 1 problem【注意细节】【预计数据不强】【8月21】
    C语言socket send()数据缓存问题
    Marlin固件之—:基础入门与測试
    java语句顺序有时非常重要
    Android Studio 使用正式签名进行调试
    插入排序、交换排序、选择排序、归并排序、基数排序
  • 原文地址:https://www.cnblogs.com/Bozh/p/2603963.html
Copyright © 2011-2022 走看看