Hello!
2013/2/1 来东敏 <laid...@gmail.com>:
> 我想请教下,是否有机制,能够在连接过程中重新设置 $limit_rate 变量,
>
> 例如:一开始由于并发多,设置200KB/s,过了n秒之后,有些小文件下载的连接已经结束,带宽空闲下来了,能够动态把200KB/s 改成500KB/s
>
对此我刚才已经说了,再次重复一遍:“至于不同请求之间的信息同步,你可以通过一些 Lua 代码配合 ngx_lua
模块提供的共享内存字典自己实现:http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT ”
更具体一些,你可以在共享内存字典中维护一个计数器,指示当前活动的连接数或者总传输率。然后你可以在各请求的输出体过滤器(比如通过
body_filter_by_lua 指令)中检查并修改此计数器,对当前请求的并对 $limit_rate 进行动态调整。另外,在
log_by_lua 中进行必要的清理是重要的,以免请求中途出错而导致计数器状态不一致。
当然,这同时需要你使用非缓冲输出模式,比如在使用 ngx_proxy 时配置 proxy_buffering off,在使用 ngx_lua
时使用 ngx.flush(true) 进行同步,等等。
Best regards,
-agentzh