加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

openstack swift和wsgi源码分析1 HTTP请求处理过程

发布时间:2020-12-14 01:49:45 所属栏目:百科 来源:网络整理
导读:分析proxy-server代理服务 的执行流程,其他的三个主要服务 account server,container server,object server执行过程通proxy server类似。 入口函数调用run_wsgi,此函数完成以下工作: 1.利用paste.deploy模块的loadapp函数加载指定服务(如proxy)的配置

分析proxy-server代理服务 的执行流程,其他的三个主要服务 account server,container server,object server执行过程通proxy server类似。

入口函数调用run_wsgi,此函数完成以下工作:

1.利用paste.deploy模块的loadapp函数加载指定服务(如proxy)的配置文件,获取到用户的application,即业务程序
    2.调用wsgi.server,其中wsgi.server会绑定IP和端口,监听来自客户端的消息。并由process_request函数负责处理消息。

下面重点研究下process_request函数是如何把消息转化为HTTP的request对象这一过程。

process_request函数,生成 HttpProtocol对象,并执行init操作,注意,HttpProtocol对象自身没有init函数,所以会调用父类(BaseHTTPServer.BaseHTTPRequestHandler)的父类(StreamRequestHandler)的父类(BaseRequestHandler) 的init 函数
。此函数中,执行setup,handle,finish 三个操作。下面依次进行分析。

setup函数

HttpProtocal 类重写了setup函数,根据client_socket 生成rfile和wfile。

handle函数

BaseHTTPRequestHandler 重写了handle函数,此函数主要调用 handle_one_request (HttpProtocl类重写)函数。

    handle_one_request函数,调用parse_request(BaseHTTPRequestHandler类)函数,通过mimetools.Message类生成headers,以及command,path,version等参数;调用get_environ (HttpProtocol类)函数生成environ字典。赋值self.application,以及调用handle_one_response函数(重点中的重点)。

    handle_one_response函数,调用self.application函数,传递environ参数和start_response函数,执行用户业务流程并返回响应数据。调用write函数,重新整理响应数据,编辑格式,调用wfile.writelines函数返回给客户端。
    在self.application(即__call__函数)执行过程中,根据envrion 会生成request对象。

finish函数

HttpProtocol类重写,核心功能由StreamRequestHandler类完成。刷新缓存,关闭wfile,rfile,释放线程和socket资源。

start_response函数解析

在多层拓扑app函数中,start_response函数会被作为参数继续传递,直到最后一层的app函数时,作为response对象的__call__函数调用参数,在__call__函数内部执行。利用app过程中执行的status和headers参数,重写handle_one_response内部的header_set变量,作为执行结果返回给客户端。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读