2012/5/28 jiangfei <liujiang...@gmail.com>:
> 我在用lua_ngx处理完一个请求返回时,想发起一个http post请求到日志记录服务器,但有不想等待这个post返
> 回 就直接返回给浏览器,这样有没有现有的支持?这段时间有点仓促,问题有点多,这个问题完了,我好好研究下这个平台,谢谢春哥
因为 ngx_lua 输出响应是流式的,所以可以利用这一点折衷一下,即先输出响应数据,再发起你自己的上游请求,正如下面的代码所演示的:
ngx.print("your response data")
ngx.eof()
send_my_upstream_post_request()
特别地,你需要使用 ngx.eof() 来指示响应体输出流的末尾,细节见:
http://wiki.nginx.org/HttpLuaModule#ngx.eof
不过,这是一种折衷的做法,理由是:
1. 在 HTTP keepalive 启用的情况下,同一连接上的下一个请求需要等待你的 POST 上游请求结束后才能得到处理,
2. 同时在 HTTP keepalive 不启用的情况下依赖于下游 HTTP 客户端主动关闭连接,否则服务器端也需得到上游请求结束后才会关闭当前连接。
Nginx 的 post_action 配置指令也有类似的限制 :)
Regards,
-agentzh
On 5月28日, 下午3时34分, agentzh <agen...@gmail.com> wrote:
> Hello!
>
> 2012/5/28 jiangfei <liujiangfei.di...@gmail.com>:
On 5月28日, 下午3时24分, Lance Li <lancelij...@gmail.com> wrote:
> 之前我有一个类似实现,是在请求发出后立刻给客户端输出一个信息,这时POST请求虽然没有完成,但客户端已经可以根据这个信息判断请求已经完成。要想直接把请 求中断似乎是不允许的。