tornado 学习笔记15 _ServerRequestAdapter分析
2016-01-04 16:16
288 查看
继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息。
判断HttpServer的request_callback属性的类型,如果是HTTPServerConnectionDelegate类型,设置委托代理属性,一旦设置了委托代理,以后请求消息的处理都由委托代理执行。其实在我们在应用Tornado开始应用程序时,初始化HttpServer时都会传递一个Application对象作为request_callback属性的值,而这个对象就是HTTPServerConnectionDelegate类型,因此,请求消息的处理可以参考Application对象的start_request方法返回的_RequestDispatcheer类。
参数:
start_line:代表开始行,如果是客户端消息,则是RequestStartLine,如果是服务端消息,则是ResponseStartLine.
headers:HTTPHeaders实例。表示消息头数据。
参数:
chunk: 接收到的数据块。
就是做一些清理工作。
15.1 构造函数
def __init__(self, server, server_conn, request_conn): self.server = server self.connection = request_conn self.request = None if isinstance(server.request_callback, httputil.HTTPServerConnectionDelegate): self.delegate = server.request_callback.start_request( server_conn, request_conn) self._chunks = None else: self.delegate = None self._chunks = []
判断HttpServer的request_callback属性的类型,如果是HTTPServerConnectionDelegate类型,设置委托代理属性,一旦设置了委托代理,以后请求消息的处理都由委托代理执行。其实在我们在应用Tornado开始应用程序时,初始化HttpServer时都会传递一个Application对象作为request_callback属性的值,而这个对象就是HTTPServerConnectionDelegate类型,因此,请求消息的处理可以参考Application对象的start_request方法返回的_RequestDispatcheer类。
15.2 headers_received
在HTTP头部被接收以及被解析后调用。def headers_received(self, start_line, headers): if self.server.xheaders: self.connection.context._apply_xheaders(headers) if self.delegate is None: self.request = httputil.HTTPServerRequest( connection=self.connection, start_line=start_line, headers=headers) else: return self.delegate.headers_received(start_line, headers)
参数:
start_line:代表开始行,如果是客户端消息,则是RequestStartLine,如果是服务端消息,则是ResponseStartLine.
headers:HTTPHeaders实例。表示消息头数据。
15.3 data_received
当数据块被接收后调用。def data_received(self, chunk): if self.delegate is None: self._chunks.append(chunk) else: return self.delegate.data_received(chunk)
参数:
chunk: 接收到的数据块。
15.4 finish
当最后一个数据块被接收后调用。def finish(self): if self.delegate is None: self.request.body = b''.join(self._chunks) self.request._parse_body() self.server.request_callback(self.request) else: self.delegate.finish() self._cleanup()
就是做一些清理工作。
15.5 on_connection_close
当连接关闭后被调用。def on_connection_close(self): if self.delegate is None: self._chunks = None else: self.delegate.on_connection_close() self._cleanup()
相关文章推荐
- UGUI ScrollRect滚动优化:无限循环利用Item
- 如何創建 iOS 展開式 UITableView?
- UITextFiled输入框的使用(详细)
- (五)黑马程序员——Java中的字符串操作类(String、StringBuilder、StringBuffer)
- IOS(UI)_UILabel(标签)
- iOS 在UILabel显示不同的字体和颜色
- UI基础-UITableViewHeaderFooterView组标题数据不加载,好友列表只能点击不能打开
- 【指导】iOS代码静态检查 -- oclint (+ xcodebuild + xcpretty + jenkins)
- UIStackView教程:了解Stack View
- phpQuery的用法
- 【数组】Unique Paths II
- 手把手带你入门之Swagger UI
- 键盘遮挡的处理。UITextField在实际的应用(综合应用, 有点小难度)
- <s:iterator value="pager.records" var="records" status="var">里的几个属性问题
- break、continue、return区别
- 使用UINavigationController时,子页面判断是从哪个页面push进来的
- iOS开发UI篇—字典转模型
- Build.VERSION.SDK_INT
- UITableViewCell的accessoryType属性
- UIBarButtonItem-添加自定义Left或者Right按钮 <总结>