python标准库wsgiref源码阅读

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代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,080评论 0 6
  • 最近在学习Python看了一篇文章写得不错,是在脚本之家里的,原文如下,很有帮助: 一、网络知识的一些介绍 soc...
    qtruip阅读 2,746评论 0 6
  • 网络 理论模型,分为七层物理层数据链路层传输层会话层表示层应用层 实际应用,分为四层链路层网络层传输层应用层 IP...
    FlyingLittlePG阅读 813评论 0 0
  • 一、前言 前段时间做Raspberry Pi的开发,正好借这个机会用Python写了几个socket的服务,之前开...
    dwademan阅读 963评论 0 3
  • 先上代码例子: 关于tornado,它既是web服务器(看成nginx服务),又是web框架(看成一个wsgi程序...
    llicety阅读 1,381评论 0 1