美文网首页
python标准库wsgiref源码阅读

python标准库wsgiref源码阅读

作者: 游踪风物 | 来源:发表于2020-04-12 17:23 被阅读0次

    1. server类继承关系一览

    socketserver.BaseServer -> socketserver.TCPServer -> http.HTTPServer

    socketserver.BaseServer

    1). 实例化需要两个参数

    server_address:

    RequestHandlerClass

    图片.png

    2). 启动方法

    • serve_forever(self, poll_interval=0.5)

      一直接受请求直到客户端关闭连接

    图片.png
    • handle_request:处理单个请求
    图片.png 图片.png

    socketserver.TCPServer

    继承了 BaseServer。

    图片.png

    实例化后会立即调用以下方法:

    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方法

    图片.png

    2. handler类继承关系一览

    BaseRequestHandler -> StreamRequestHandler -> socketserver.BaseRequestHandler

    socketserver.BaseRequestHandler

    图片.png

    基类,实例化后会立即调用handle()finish()方法。

    StreamRequestHandler

    继承了socketserver.BaseRequestHandler

    图片.png

    BaseHTTPRequestHandler

    继承了StreamRequestHandler

    图片.png

    WSGIRequestHandler

    继承了BaseHTTPRequestHandle

    图片.png

    3. 程序入口

    调用 handle_request() 将会启动服务,处理完一条请求后会关闭。

    图片.png 图片.png

    调用 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()方法。

    图片.png 图片.png 图片.png

    相关文章

      网友评论

          本文标题:python标准库wsgiref源码阅读

          本文链接:https://www.haomeiwen.com/subject/aeyauhtx.html