zoukankan      html  css  js  c++  java
  • tornado 学习笔记15 _ServerRequestAdapter分析

         继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息。

    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()
  • 相关阅读:
    页面实现文件的下载
    微信小程序拉起登录的操作
    css3之border-radius理解
    web前端常用网站--更新中
    小程序中遇见文件过大的话就需要分包
    JS中的“&&”与“&”和“||”“|”有什么区别?
    ts中有时莫名报错
    浏览器解析JavaScript的原理
    在vue中axios的问题
    eslint的规则
  • 原文地址:https://www.cnblogs.com/liaofeifight/p/5099307.html
Copyright © 2011-2022 走看看