• 【Nginx】请求上下文


    上下文与全异步web服务器的关系

    请求上下文指在一个请求的处理过程中,把一些关键的信息保存下来的类似struct这样的结构体。每个http模块都可以有自己的上下文结构体,一般都是在刚开始处理请求时在内存池上分配它,之后当经由epoll、http框架再次调用到http模块的处理方法时,这个http模块可以由请求上下文结构体中获取信息。请求结束时就会销毁该请求的内存池,自然也就销毁了上下文结构体。

    Nginx是全异步处理的web服务器,http模块可能会多次反复处理同一个请求,所以必须定义上下文结构体来保存处理过程的中间状态。Nginx框架不会维护这个上下文,只能由这个请求自己保存着上下文结构体。

    使用http上下文

    #define ngx_http_get_modult_ctx(r,module)(r)->ctx[module.ctx_index]

    #define ngx_http_set_ctx(r,c,module) r-ctx(module.ctx_index)=c;

    ngx_http_get_module_ctx接受两个参数,第一个参数为ngx_http_request_t指针,第二个参数是当前的http模块对象。返回值是某个http模块的上下文结构体指针。如果这个http模块没有设置过上下文,将会返回NULL 。

    ngx_http_set_ctx接受三个参数,第一个参数是ngx_http_request_t指针,第二个参数是准备设置的上下文结构体的指针,第三个参数是http模块对象。

    http框架如何维护上下文结构

    typedef struct ngx_http_request_s

    {

      ...

      void **ctx;

      ...

    }ngx_http_request_t;

    http框架在ctx数组中保存所有http模块上下文结构体的指针。

  • 相关阅读:
    [日常训练]大灾难
    [cf235D]Graph Game
    [日常训练]选课
    [日常训练]挂科
    [学习笔记]概率&期望
    [日常训练]yayamao的神题
    [学习笔记]原根
    LOJ#2132. 「NOI2015」荷马史诗
    LOJ#2131. 「NOI2015」寿司晚宴
    LOJ#2129. 「NOI2015」程序自动分析
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3838053.html
Copyright © 2020-2023  润新知