Huuu 学习了,俺以为只是 http post 过来的数据获取呢,,,看来 opearesty 来自生产环境,考虑的足够多!
进一步放心了,,,
在 2012年6月5日 下午12:28,agentzh <age...@gmail.com> 写道:
> Hello!
>
> 2012/6/5 卫越 <we...@taobao.com>:
>> 只需说明一点,我就可放心:
>> lua读取post请求的这段就已经按照nginx的内存要求由lua实现了,还是需要lua代码的使用者自己来实现?
>>
>
> ngx_lua 模块的 ngx.req.read_body() 调用的就是 nginx 核心的
> ngx_http_read_client_request_body 函数。所以和其他 Nginx
> 模块的读取结果没有区别。类似地,ngx.req.discard_body() 也调用的是 nginx 核心中的
> ngx_http_discard_request_body() 函数。
>
> 如果是使用的 ngx.req.socket() 返回的"下游 cosocket"对象,则数据不会像 nginx 核心中的
> ngx_http_read_client_request_body
> 函数自动放入标准的内存位置(r->request_body->bufs)或者临时文件(r->request_body->temp_file),因为它支持严格的流式处理请求体数据,而
> nginx 核心的做法必然会缓冲整个请求体(无论是在内存中还是在临时文件中)。
>
> 如果需要让"下游 cosocket"对象读取的数据也能放入那些"标准的"位置,从而能让其他 nginx 模块,比如 ngx_proxy
> 享用,则需要由用户 Lua 代码自己显式调用 ngx.req.init_body(), ngx.req.append_body()和
> ngx.req.finish_body() 来把"下游 cosocket"对象读出的数据放入"标准"位置。
>
> 这里提到的 ngx.req.init_body(), ngx.req.append_body()和
> ngx.req.finish_body() 函数已经在 ngx_lua 模块的 req-body 分支中实现了(见我上面回复的一封邮件)。而
> Matthieu Tourne 使用的就是这种方式来实现纯 Lua 的输入过滤器,并且和 ngx_proxy 模块协同工作。
>
> Best regards,
> -agentzh
>
> --
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/