[原]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做一个分析,下一章将从源代码方面看整个设计过程