我们想使用ngx_lua方式能够获取到当前下载请求并发数,并用它来完成并发数控制。
方案A: 注册ngx.on_abort函数,这样就可以在客户端关闭的时候总数减一操作。所以有了下面的配置和代码。验证结果,my_cleanup没有执行。 @agentZH,这是个bug么?还是我对这个API理解错了?
nginx 配置:
location /download/ {
lua_check_client_abort on;
access_by_lua_file lua/down_access.lua;
chunked_transfer_encoding off;
default_type application/octet-stream;
alias ../download/;
}
down_access.lua 代码:
function my_cleanup()
ngx.log(ngx.WARN, "count --")
end
local ok, err = ngx.on_abort(my_cleanup)
ngx.log(ngx.WARN, "count ++ ", ok, err)
ngx.var.limit_rate = 1000
方案B:
分别在不同请求阶段对下载计数进行加、减操作,实际测试可行。只是使用起来跳跃性有点大。
nginx 配置:
location /download/ {
lua_check_client_abort on;
access_by_lua_file lua/down_access.lua;
log_by_lua_file lua/down_log.lua;
chunked_transfer_encoding off;
default_type application/octet-stream;
alias ../download/;
}
除了这两个方案,还有更好的办法不?期待。。。 。。。