Parallel subrequests

Hi

I want write a http hadler(using subrequest) to deal with combine
response from mutiple backend. but “Emiller’s Advanced Topics In Nginx
Module Development - 2.3. Sequential subrequests” issue that "
Subrequests
might need to access the network, and if so, Nginx needs to return to
its
other work while it waits for a response. So we need to check the return
value of ngx_http_subrequest"
How to write a Parallel subrequests which several subrequests by POST
in
parallel rather than one by one after received preivous response ?
thanks.

best regards
honwel

Posted at Nginx Forum:

Hello!

On Thu, Dec 19, 2013 at 02:59:03AM -0500, honwel wrote:

thanks.
Just call ngx_http_subrequest() multiple times. Take a look at
the source to understand how it works.


Maxim D.
http://nginx.org/

Ok,thanks a lot,I will try.

Posted at Nginx Forum:

hi, Maxim

  It is seem like that ngx_http_subrequest() supports only GET 

method:

sr->method = NGX_HTTP_GET;
sr->http_version = r->http_version;
...............

sr->method_name = ngx_http_core_get_method;

In my application currently, NGINX received a POST request and issue

mutiple subrequests(Parallel) to get combine content by set proxy_pass
location, but ngx_http_subrequest() not supports POST method, so,
What
do I need to pay attention, if i just modify to :
sr->method = NGX_HTTP_POST
sr->http_version = r->http_version;

sr->method_name = r->method_name;
???

thanks a lot!

best regards
honwel

Posted at Nginx Forum:

ok, thanks.

Posted at Nginx Forum:

hi, agentzh

There is also a problem that how can hold the one subrequest's 

response
meanwhile waiting others(subrequest) comes, then combine the all
response(data) and send it to client? is it possible?
thanks a lot!

Best regards,
honwel

Posted at Nginx Forum:

Hello!

On Tue, Dec 24, 2013 at 11:14 PM, honwel wrote:

but ngx_http_subrequest() not supports POST method, so, What
do I need to pay attention, if i just modify to :
sr->method = NGX_HTTP_POST
sr->http_version = r->http_version;

sr->method_name = r->method_name;
???

Yeah, you can do something like that.

My Nginx modules ngx_echo, ngx_srcache, and ngx_lua all support custom
method names in their subrequests. See

GitHub - openresty/echo-nginx-module: An Nginx module for bringing the power of "echo", "sleep", "time" and more to Nginx's config file

GitHub - openresty/srcache-nginx-module: Transparent subrequest-based caching layout for arbitrary nginx locations.

GitHub - openresty/lua-nginx-module: Embed the Power of Lua into NGINX HTTP servers

Merry Christmas!

Best regards,
-agentzh

Hello!

On Thu, Dec 26, 2013 at 07:50:01AM -0500, honwel wrote:

hi, agentzh

There is also a problem that how can hold the one subrequest's response

meanwhile waiting others(subrequest) comes, then combine the all
response(data) and send it to client? is it possible?
thanks a lot!

By default, responses to subrequests are serialized in correct
order by postpone filter module, see
src/http/ngx_http_postpone_filter_module.c.

That is, if you want to just return responses in order there is no
need to do anything, it will happen automatically.


Maxim D.
http://nginx.org/

Yes,you are right. But I want combine the data like:
Subrequst1’s response: “first name: John”
Subrequst2’s response: “last name: abc”

Excepting response:
“John abc”

Posted at Nginx Forum:

Hello!

On Thu, Dec 26, 2013 at 10:38:20AM -0500, honwel wrote:

Yes,you are right. But I want combine the data like:
Subrequst1’s response: “first name: John”
Subrequst2’s response: “last name: abc”

Excepting response:
“John abc”

In this particular example, using a filter module after the
postpone filter should be a good solution. It will see full
response concatenated by the postpone filter, and will be able
to transform it appropriately.


Maxim D.
http://nginx.org/

Excepting response:
“John abc”

Not
Response1:“John”
Response2:“abc”

Thanks for your patience!

Posted at Nginx Forum:

Hello!

On Thu, Dec 26, 2013 at 11:21:42AM -0500, honwel wrote:

Excepting response:
“John abc”

Not
Response1:“John”
Response2:“abc”

Thanks for your patience!

Yes. What I suggested is to write a filter which will transform

Response1:“John”
Response2:“abc”

as available after the pospone filter to

“John abc”

you want to have as a result. This should be easier than writing
a filter which will also wait for all subrequests. If it doesn’t
work for you (e.g., if concatenation of subrequest responses isn’t
parsable), you may do subrequest serialization yourself, before
the postpone filter.


Maxim D.
http://nginx.org/

how to write a filter module after the postpone filter .

if i change module’s config file or complie file (auto/) ? any example?

Posted at Nginx Forum: