Nginx Module (I/O block)
mdounin at mdounin.ru
Wed Mar 6 12:50:31 UTC 2013
On Wed, Mar 06, 2013 at 12:01:44AM +0100, alexander_koch_log wrote:
> On 02/10/2013 12:25 AM, Maxim Dounin wrote:
> >On Sat, Feb 09, 2013 at 04:41:54PM +0100, alexander_koch_log wrote:
> >>It is not clear to me how to avoid blocking the nginx reactor loop
> >>when creating an nginx module which should perform some long I/O
> >>operations and return the response to the client. Or is this
> >>handled internally by Nginx?
> >Correct aproach is to avoid blocking for a long time, and use
> >non-blocking I/O and event-based notification instead.
> >What exactly should (and can) be done depends on the exact case.
> >E.g. to work with sockets there are lots of various functions
> >available to simplify things. Working with files without blocking
> >is harder and not always possible, but a common case is handled by
> >nginx - to send some large file you just have to open the file and
> >ask nginx to send an in-file buffer.
> When sending an in-file buffer, is it still possible to have the
> read stop when a special byte char is read like \xFF even though the
> provided bytes to read are larger?
As e.g. with sendfile used file's data is never available in
user memory, the answer is no.
> One way would be to read to the buffer then truncate the memory,
> then send the buffer? Or is there an efficient way?
What you are trying to do is probably beter handled by a filter
module. You may ask nginx to read a file into memory buffers
(output_buffers), and then inspect/modify all data passed though
More information about the nginx-devel