Nginx Module Concurrency Query

Maxim Dounin mdounin at mdounin.ru
Fri Jul 1 18:07:54 MSD 2011


Hello!

On Fri, Jul 01, 2011 at 09:40:20AM -0400, Danny Glover wrote:

> I have been trying to get a simple nginx_module working. I referred
> http://www.evanmiller.org/nginx-modules-guide.html and found it very
> useful. 
> 
> The module takes "http://10.90.50.31:1257/hello?w=lelj&ljd=22112" and
> sleeps for few sec and simply prints the URI. 
> 
> Here is the code :-

[...]

>   usleep(1500000);

[...]

> The response time was 11376ms, 7587ms, 3804ms for 30, 20, 10 concurrency
> respectively.  
> I am not sure what I am missing. 
> 
> Can someone please guide me on how do I make this module scale? 

The behaviour you see is expected: you can't sleep as it will 
block all requests in a worker process.  Welcome to event-based 
programming. :)

You have to arm timer and return back to event loop, then continue 
processing once event fires.  You may take a look how to do this 
in standard limit_req module, though it will require some adaption 
for handler module.  In particular, you'll have to return NGX_DONE 
and then finalize request yourself, much like it's done when 
reading request body.

Maxim Dounin



More information about the nginx mailing list