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

狂风中的少年 提交于 2020-02-04 07:44:31

引言:第四章讲解的有些乱,主要是代码太长了,而且还是在一章就讲完了,所以我决定将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做一个分析,下一章将从源代码方面看整个设计过程

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!