Hello!
2013/11/11 Harold.Miao:
>
> 目前对于一些视频应用,需要对磁盘上的大文件进行随机读取,一般来讲,采用下面的子请求模式可以利用nginx的sendfile特性
>
我的建议是:
1. 你仍然可以让 Nginx 只读指定的文件部分,方法是你在 Lua 里面通过 ngx.req.set_header() 接口伪造
Accept-Ranges 请求头。
2. 此时不要使用子请求,尽量把你的 Lua 代码放在 rewrite_by_lua 或者 access_by_lua 里面。
我有计划在 ngx_lua 里面暴露内核 AIO 的接口,不过在 Linux 系统上的意义有限(因为 Linux 的 AIO 支持限制很多)。
> 如果用lua来写的话,是不是io操作都应该放在一个协程里去跑?
Lua 协程并不对应新的 OS 线程,所以磁盘 IO 总是会阻塞。当然,如果内核的 page cache
命中率足够高的话,大部分时间还是直接从内存里面读的,所以也问题不大。
Regards,
-agentzh