

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
4 messages in ru.sysoev.nginxRe: about the Guide to Nginx Module D...| From | Sent On | Attachments |
|---|---|---|
| Manlio Perillo | Aug 19, 2007 9:18 am | |
| Evan Miller | Aug 20, 2007 12:31 am | |
| Evan Miller | Aug 20, 2007 12:39 am | |
| Manlio Perillo | Aug 20, 2007 2:57 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: about the Guide to Nginx Module Development | Actions... |
|---|---|---|
| From: | Manlio Perillo (manl...@public.gmane.org) | |
| Date: | Aug 20, 2007 2:57:55 am | |
| List: | ru.sysoev.nginx | |
Evan Miller ha scritto:
Manlio Perillo wrote:
Hi again.
I have decided to write mod_wsgi by myself, and I have fuond the Evan Miller's guide very helful.
Glad it was useful. I'll try to keep updating it with more info, but in the meantime I thought I'd try to answer your specific questions (below).
However I think that some important documentation is missing: 1) The overall architecture of nginx 2) nginx memory handling
Nginx has a pool of memory associated with each request (r->pool), which is reclaimed at the end of the request. You can malloc memory with ngx_palloc(r->pool, BYTES). I'm not sure whether you can free memory allocated in this way manually.
Ok. I'm using the pool also for allocating memory for the configuration_object (main e location), since I need to convert from ngx_str_t to null terminating strings.
3) how to read data from the request payload
I'm not sure, actually; but check out http://www.riceonfire.org/lxr/http/source/http/ngx_http_request_body.c
If I'm right, when calling a "normal" request handler, the entire request body has been read by nginx, and stored in a temporary file or in internal buffers.
However I do not understand this: """If the request body is more than the buffer, then the entire request body or some part is written in a temporary file."""
Does nginx use only one buffer? Does really nginx write a part of the request body in the buffer and a part on a temporary file?
The question is simple: - if the entire request body is in a file, I can pass to the WSGI application a File object. - if the entire request body is in one buffer, I can pass to the WSGI application a StringIO object
If this is possible, I can keep the code as simple as possible!
4) how to read and generate arbitrary headers There is an headers attribute in the request struct, what is its content?
I have done some test, and this is not very hard. The "hard" part is that some headers must be "parsed" and stored in special attributes of the request object.
[...]
5) More about chain links. When sending the response body, we have two choices (but I'm not sure): - write the entire chain links and then pass it to the output filter (so we buffer the entire response) - create a partial response, create a buffer and call the output filter, then create a new partial response, create a new buffer and call the outputfilter, and so on.
I believe that's correct.
The question here is: when I call the output filter function without return from the handler function, does nginx try to send the data to the client? Does nginx run a "main loop" cycle?
When I research these issues more I'll add them to the guide.
Good luck with mod_wsgi! I know it's a module a lot of people would find useful.
Thanks! I'm writing mod_wsgi with one design goal in mind: to be able to use nginx as a small and robust server to serve WSGI applications.
nginx is not Apache and mod_wsgi is not a general purpose module: it must be used to serve only one WSGI application with one nginx server.
Evan
P.S. The nginx code is really good!
Regards Manlio Perillo







