关于这个问题,我就抛砖引玉了。
首先理解ngx_buf_t这个结构体,这个buf结构体不仅仅可以包含内存中数据的信息,也可以包含文件的信息。其中file_pos,file_last,ngx_file_t *file,in_file这些都是与文件有关的。 我想我说到这儿,你就应该能明白我的意思了。那就是ngx_buf_t中我不读取文件的内容,而是将文件的信息填入到这几个ngx_buf_t的结构体中,然后构造ngx_chain_t 将其发送出去。
另外,如果按照你所讲的思路:将文件内容全部读取到内存中,然后再发送。这样将会占用多大的内存呢?Nginx对于内存的使用是非常精细和吝啬的,也正是这种精细成就了Nginx的高性能。