openresty的ngx.timer.at

Posted mentalidade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openresty的ngx.timer.at相关的知识,希望对你有一定的参考价值。

openresty的ngx.timer.at真是个强大的方法。

  • 例如某些函数不可以在一些nginx的执行阶段使用时,可以ngx.timer.at API 创建一个零延迟的timer,在timer中去处理。
  • 遇到一些高延迟的函数,因为定时调用是在后台运行,并且他们的执行不会增加任何客户端的响应时长
local function save_message(premature)
    ngx.sleep(5)
    local file = assert(io.open(‘/tmp/test.log‘,‘a+‘))
    file:write(string.format("timer=====> %s %s\n", ngx.time(), "in timer"))
    file:close()
end

local file = assert(io.open(‘/tmp/test.log‘,‘a+‘))
file:write(string.format("out tomer 1=====> %s %s\n", ngx.time(), "out timer 1"))
file:close()
ngx.sleep(5)
local file = assert(io.open(‘/tmp/test.log‘,‘a+‘))
file:write(string.format("out tomer 2=====> %s %s\n", ngx.time(), "out timer 2"))
file:close()
--ngx.sleep(5)
local ok, err = ngx.timer.at(0, save_message)
if not ok then
    ngx.log(ngx.ERR, "[blm-metric] failed to create timer: ", err)
end

ngx.say("success")

结果将在5秒后返回,查看日志,每隔5秒分别打印出三次的结果,

以上是关于openresty的ngx.timer.at的主要内容,如果未能解决你的问题,请参考以下文章

openresty编写代码怎么用命令启动和执行

openresty源码剖析——lua代码的执行

译OpenResty C 编码风格指南

如何在OpenResty里实现代码热更新

验证 Openresty+Lua+GraphicsMagick

[lua][openresty]代码覆盖率检测的解决方式