请教下lua_ngx 能否向另一台服务器发起异步的http post请求?

58 views
Skip to first unread message

jiangfei

unread,
May 28, 2012, 3:14:56 AM5/28/12
to openresty, age...@gmail.com
亦春哥,再请教个问题,我在用lua_ngx处理完一个请求返回时,想发起一个http post请求到日志记录服务器,但有不想等待这个post返
回 就直接返回给浏览器,这样有没有现有的支持?这段时间有点仓促,问题有点多,这个问题完了,我好好研究下这个平台,谢谢春哥

Lance Li

unread,
May 28, 2012, 3:24:07 AM5/28/12
to open...@googlegroups.com
之前我有一个类似实现,是在请求发出后立刻给客户端输出一个信息,这时POST请求虽然没有完成,但客户端已经可以根据这个信息判断请求已经完成。要想直接把请求中断似乎是不允许的。

agentzh

unread,
May 28, 2012, 3:34:47 AM5/28/12
to jiangfei, openresty
Hello!

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

jiangfei

unread,
May 28, 2012, 3:42:55 AM5/28/12
to openresty
好的,谢谢春哥,我研究下

On 5月28日, 下午3时34分, agentzh <agen...@gmail.com> wrote:
> Hello!
>
> 2012/5/28 jiangfei <liujiangfei.di...@gmail.com>:

jiangfei

unread,
May 28, 2012, 3:43:22 AM5/28/12
to openresty
谢谢兄弟,

On 5月28日, 下午3时24分, Lance Li <lancelij...@gmail.com> wrote:
> 之前我有一个类似实现,是在请求发出后立刻给客户端输出一个信息,这时POST请求虽然没有完成,但客户端已经可以根据这个信息判断请求已经完成。要想直接把请 求中断似乎是不允许的。

Reply all
Reply to author
Forward
0 new messages