[no subject]

Manlio Perillo manlio_perillo at libero.it
Sun Apr 13 18:05:00 MSD 2008


François Battail ha scritto:
> Manlio Perillo <manlio_perillo at ...> writes:
> 
>  
>> What type of connection do you want to create?
> 
> I don't want to create a connection, just to split the processing of a HTTP
> request in two without blocking Nginx.
> 
> HTTP request
> -> handler
>    send a message to one of my workers
>    returns NGX_AGAIN
> 
> -> worker (running on an independant thread)
>    wait for a message
>    do the job (using blocking calls)
>    "wake up" the HTTP handler with a Nginx event
> 

Two questions:
- how many threads do you have for each worker process?
- how do you plan to implement the "wake up"?

> -> handler
>    process the worker's results
>    finalize the HTTP reply
> 
> Hope it's more clear written that way.
>    
>>>> Is my_http_worker in a separate thread?
>>>> Then this will not work, Nginx is not thread safe.
>>> Yes there are separate threads launched for each Nginx worker process, 
>>> it's not an issue as a request is linked to a worker process, just a 
>>> matter of mutex; nothing to scare me! 
>> The problem is with:
>> ngx_post_event
>>
>> as far as I know it is not thread safe, unless you enable threads 
>> support in Nginx (but in current version it is broken).
> 
> Yes, you're correct. But I don't want to activate thread support in Nginx,
> I would like to create my specific threads *inside* a Nginx worker. I just 
> need to protect the event queue of Nginx from my threads with a mutex as 
> far I've seen.
> 

No.
You need to protect the event queue not only from your threads, but also 
from the main thread of the worker process, and here you don't have any 
control.


>>> The mix using non preemptive model and worker thread is
>>> very interesting but not so easy to do.
>>>
>> What are you trying to do?
> 
> Simply to call blocking functions during a HTTP request without blocking 
> Nginx and without using an upstream server. In my project the database (Sqlite3)
> is embedded into the web server and share commons memory pools, 
> that way I can process XML documents stored in the database without 
> allocating or copying data but only by using a list of fragment buffers 
> for the reply which fit nicely with ngx_chain_t. I hope it will be very 
> fast to process a dynamic request.
> 
> Your code is a great help for me, thank you.
>

You're welcome.

> Best regards
> 
> 
> 


Regards   Manlio Perillo





More information about the nginx mailing list