openresty 常用API學習
阿新 • • 發佈:2020-05-31
ngx.exit
函式原型: ngx.exit(status)
函式說明: 中斷當前請求,並將status返回給nginx
ngx.worker.exiting 函式原型:boolean = ngx.worker.exiting() 函式說明: 此函式返回一個布林值,指示當前Nginx工作程序是否已開始退出。Nginx worker程序退出發生在Nginx server quit或configuration reload(也稱為HUP reload)上。
ngx.timer.at 函式原型:hdl,err = ngx.timer.at(delay,callback,user_arg1,user_arg2,...) 函式說明: 建立帶有使用者回撥函式和可選使用者引數的Nginx計時器 第一個引數delay指定計時器的延遲(秒)。在這裡可以指定0.001這樣的小數秒為1毫秒。也可以指定0延遲, 在這種情況下,噹噹前處理程式產生執行時,計時器將立即過期。 第二個引數callback可以是任何Lua函式,稍後將在指定延遲後的後臺“light thread”中呼叫該函式。 Nginx核心將使用引數premature、user_arg1、user_arg2等自動呼叫使用者回撥,其中premature引數接受一個布林值,該值指示是否是過早計時器過期, user_arg1、user_arg2等是呼叫時指定的(額外的)使用者引數下一代計時器作為剩下的論點。 強調①:當Nginx工作程序正在嘗試關閉時,會發生提前定時器到期,如在Nginx配置中由HUP訊號觸發的重新載入或Nginx伺服器關閉。當Nginx工作器試圖關閉時,不能再呼叫ngx.timer.at建立具有非零延遲的新定時器,在這種情況下ngx.timer.at將返回nil,還有一個描述錯誤的字串,即“程序退出”。 從v0.9.3版本開始,即使Nginx工作程序開始關閉,也允許建立零延遲計時器。 強調②當計時器過期時,計時器回撥中的使用者Lua程式碼將在一個“輕執行緒”中執行,該執行緒與建立計時器的原始請求完全分離(說明該執行緒仍然被主執行緒所join,並沒有detach,即定時器不執行完成,主程序無法退出)。 因此,不能在原始請求和計時器使用者回撥函式之間共享與建立它們的請求具有相同生存期的物件(如cosockets)。local delay = 5 local handler handler = function (premature) -- do some routine job in Lua just like a cron job if premature then return end local ok,err = ngx.timer.at(delay,handler) if not ok then ngx.log(ngx.ERR,"failed to create the timer: ",err)return end end local ok,handler) if not ok then ngx.log(ngx.ERR,err) return end location / { ... log_by_lua_block { local function push_data(premature,uri,args,status) -- push the data uri,and status to the remote -- via ngx.socket.tcp or ngx.socket.udp -- (one may want to buffer the data in Lua a bit to -- save I/O operations) end local ok,err = ngx.timer.at(0,push_data,ngx.var.uri,ngx.var.args,ngx.header.status) if not ok then ngx.log(ngx.ERR,"failed to create timer: ",err) return end } }