Nginx基础. Nginx模块上下文

Nginx处理请求时,每个模块的上下文结构体通常在内存池中分配,并在请求结束时释放。模块通过请求上下文获取信息,若不需要上下文,可忽略。
摘要由CSDN通过智能技术生成
这里要提到的上下文是针对HTTP请求的, 每个HTTP请求对应于每一个HTTP模块都可以有一个独立的上下文结构体.(可以看出, 并不是一个HTTP请求的上下文由所有HTTP模块共享)

每个请求对于每个模块的上下文结构体一般是在刚开始处理请求时在内存池分配它. 之后经过epoll, HTTP框架再次调用到HTTP模块的处理方法时, 这个HTTP模块可以由请求的上下文结构中获取信息. 在请求结束后, 其对应的内存池被释放, 申请的上下文也就被释放了. 因为上下文是针对某请求的某一个模块的, 所以如果某模块不需要上下文, 完全可以不理会.


为什么使用?
    之所以使用上下文, 是因为 Nginx是一个全异步处理的Web服务器, 1个请求并不会在epoll的一次调度中处理完成, 甚至会在成千上万的HTTP模块后才能完成请求的处理.


哪些接口?
    既然上下文是针对某请求的某模块的, 那么可以根据前文中, 存储某模块存储create_main_conf函数返回的结构体的方式了解到, 其实所有模块在每个请求中都对应了数组的一个元素, 所以可以根据数组下标来找到对应模块的数据.
    使用上下文的方式就是调用下面这两个宏:
#define ngx_http_get_module_ctx(r, module)  (r)->ctx[module.ctx_index]
#define ngx_http_set_ctx(r, c, module)      r->ctx[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值