1. server类继承关系一览
socketserver.BaseServer -> socketserver.TCPServer -> http.HTTPServer
socketserver.BaseServer
1). 实例化需要两个参数
server_address:
RequestHandlerClass:

2). 启动方法
-
serve_forever(self, poll_interval=0.5)一直接受请求直到客户端关闭连接

-
handle_request:处理单个请求


socketserver.TCPServer
继承了 BaseServer。

实例化后会立即调用以下方法:
server_bind: socket.bind(self.server_address)
server_activate: self.socket.listen(self.request_queue_size)
server_close: self.socket.close()
http.HTTPServer
继承了socketserver.TCPServer,复写了server_bind方法

2. handler类继承关系一览
BaseRequestHandler -> StreamRequestHandler -> socketserver.BaseRequestHandler
socketserver.BaseRequestHandler

基类,实例化后会立即调用handle()和finish()方法。
StreamRequestHandler
继承了socketserver.BaseRequestHandler

BaseHTTPRequestHandler
继承了StreamRequestHandler

WSGIRequestHandler
继承了BaseHTTPRequestHandle

3. 程序入口
调用 handle_request() 将会启动服务,处理完一条请求后会关闭。


调用 server = server_class((host, port), handler_class) 实例化将会触发socketserver.TCPServer的 __init__里面的方法server_bind(),server_activate(),server_close();还会触发BaseRequestHandler.__init__里面的handle(),finish()方法。
( 其中server_bind()与handle()被复写,实际调用的是WSGIServer.server_bind()与WSGIRequestHandler.handle() )
server.set_app(app)将 demo_app 传给 handler application属性
在执行这句httpd.handle_request()后会调用start_response()方法。


