Chinaunix首页 | 论坛 | 博客
  • 博客访问: 421902
  • 博文数量: 83
  • 博客积分: 2622
  • 博客等级: 少校
  • 技术积分: 1345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 08:59
个人简介

一直在努力

文章分类

全部博文(83)

文章存档

2014年(3)

2013年(9)

2012年(46)

2010年(25)

分类: 服务器与存储

2012-08-21 15:49:32

研究proxy/server.py中对于http请求的处理。proxy-server的作用是捕获所有对swiftHTTP请求,然后将处理的请求发送至storagenode进行处理。proxy/server.py中定义了proxy-serverApplication类,和处理请求的*Controller类,类图如下:

 

 1 proxy.server定义的Controller

 

proxy/server.pyapp_factory方法返回的是Application的实例,相比其父类BaseApplication,Applicationhandle_request()方法中来处理发送来的HTTP请求。过程如下所示:

1.         Application类继承了父类BaseApplication,当用户请求发送时,__call__函数接受用户请求,获取env, start_response两个参数。

2.         HTTP请求解析使用的webob模块提供的Request类解析,得到解析后的请求对象req

3.         调用Application类定义的hand_request函数,该函数返回请求处理的响应结构体,而实际上该handle_request函数反调用BaseApplication类的handle_request函数进行请求处理。

4.         handle_request函数,首先处理HTTP请求异常情况,异常请求返回使用的webob模块提供的现有函数。

5.         真正的处理过程在于:解析请求的urireq.path,得到需要处理的请求是accountobject还是container,然后生成对应的controller实例,处理请求。

6.         具体的controller类如类图所示,proxy server分析请求的方法req.method,对应的controller实例调用对象的method处理方法。分别提供不同的http请求方法的处理方式PUT/GET/DELETE/HEAD

7.         controller类主要是根据用户请求,计算出请求所在的ring对应的partitionnodedev等信息,然后与对应的node节点建立http连接,发送http请求,等待请求处理的结果,将处理结果返回给用户。

class controller3个派生类ObjectControllerContainerControllerAccountController
阅读(2296) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~