ngx_lua_API 指令详解(一)ngx.timer.at 指令
语法: ok,err = ngx.timer.at(delay,callback,user_arg1,user_arg2 ...)
上下文: init_worker_by_lua *,set_by_lua *,rewrite_by_lua *,access_by_lua *,content_by_lua *,header_filter_by_lua *,body_filter_by_lua *,log_by_lua *,ngx.timer。*,balancer_by_lua *,ssl_certificate_by_lua *,ssl_session_fetch_by_lua *,ssl_session_store_by_lua *
描述:
创建一个带有用户回调函数的Nginx定时器以及可选的用户参数。
第一个参数
delay指定定时器的延迟(以秒为单位)。可以指定小数秒0.001,这意味着1毫秒。0也可以指定延迟,在这种情况下,当当前处理程序产生执行时,定时器将立即过期。
第二个参数
callback可以是任何Lua函数,后面将在后面的“light thread”中调用延迟指定。用户回调将自动Nginx的芯与参数调用premature, user_arg1,user_arg2,和等等,其中,所述premature 参数采用一个布尔值指示是否它是一个过早的计时器期满或没有,和user_arg1,user_arg2和等等,是那些(额外的)用户调用ngx.timer.at 作为剩余参数时指定的参数。
当Nginx工作进程正在尝试关闭时,会发生提前定时器到期,如在Nginx配置中由HUP信号触发的重新加载或Nginx服务器关闭。当Nginx工作器试图关闭时,不能再调用ngx.timer.at创建具有非零延迟的新定时器,在这种情况下ngx.timer.at将返回nil,还有一个描述错误的字符串,即“进程退出”。
从v0.9.3发行版开始,即使Nginx工作进程开始关闭,也允许创建零延迟定时器。
当定时器到期时,定时器回调中的用户Lua代码正在从创建定时器的原始请求完全分离的“轻线程”中运行。因此,与创建它们的请求(如子仓)具有相同生命周期的对象不能在原始请求和定时器用户回调函数之间共享。
一、只执行一次
nginx.conf
location /ngx_timer_at {
default_type 'text/html';
lua_code_cache off;
content_by_lua_file /home/tinywan/Openresty_Protect/First_Protect/lua/get_timer_at.lua;
}
get_timer_at.lua 文件
local delay =
local handler
handler = function (premature,param)
-- do some routine job in Lua just like a cron job
if premature then
return
end ngx.log(ngx.ERR, "param is : ", param)
end local ok, err = ngx.timer.at(delay, handler,"Hello Tinywan")
执行请求后:curl http://127.0.0.1/ngx_timer_at 执行 5 s 后打印以下内容在日志文件中
tail -f error.log
2017/05/04 23:24:38 [error] 95933#0: *433016 [lua] get_timer_at.lua:9: param is : Hello Tinywan, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:80
二、不停的循环,和while 一样的结果
local delay =
local handler
handler = function (premature,param)
-- do some routine job in Lua just like a cron job
if premature then
return
end ngx.log(ngx.ERR, "param is : ", param) ngx.timer.at(delay, handler,"again run... Tinywan")
end local ok, err = ngx.timer.at(delay, handler,"Hello Tinywan")
执行请求后:curl http://127.0.0.1/ngx_timer_at 执行 5 s 后打印以下内容在日志文件中
// :: [error] #: * [lua] get_timer_at.lua:: param is : Hello Tinywan, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:
// :: [error] #: * [lua] get_timer_at.lua:: param is : again run... Tinywan, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:
// :: [error] #: * [lua] get_timer_at.lua:: param is : again run... Tinywan, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:
// :: [error] #: * [lua] get_timer_at.lua:: param is : again run... Tinywan, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:
// :: [error] #: * [lua] get_timer_at.lua:: param is : again run... Tinywan, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:

syntax: headers = ngx.req.get_headers(max_headers?, raw?)
context: set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*
Returns a Lua table holding all the current request headers.
local h = ngx.req.get_headers()
for k, v in pairs(h) do
...
end
json 和 lua table 转换的细节
ngx_lua_API 指令详解(一)ngx.timer.at 指令的更多相关文章
- #pragma 预处理指令详解
源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma 预处理指令详解 在所有的预处理指令中, ...
- [转]JVM指令详解(上)
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- C#中的预处理器指令详解
这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...
- rsync指令详解
rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...
- 迈向angularjs2系列(2):angular2指令详解
一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...
- LDM与STM指令详解
title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...
- C#中的预处理指令详解
这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...
- pragma comment的使用 pragma预处理指令详解
pragma comment的使用 pragma预处理指令详解 #pragma comment( comment-type [,"commentstring"] ) 该宏放置一 ...
- Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY <源路径> .. ...
- nginx.conf中关于nginx-rtmp-module配置指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...
随机推荐
- “吃神么,买神么”的第二个Sprint计划(总结)
“吃神么,买神么”项目Sprint计划 ——5.28 星期四(第八天)第一次Spring计划结束 第一阶段Spring的目标以及完成情况: 时间:5月21号~5月28号(7天) 目标:第二阶段主 ...
- unix网络编程——I/O多路复用之epoll
1. 基本概念 当程序进行IO时,如果数据尚未准备好,那么IO将处于阻塞状态.当某个进程有多个打开的文件,比如socket,那么其后的所有准备好读写的文件将受到阻塞的影响而不能操作.不借助线程,单一进 ...
- 使用百度地图api可视化聚类结果
1.写在前面 上接YFCC 100M数据集分析笔记,在对聚类出的照片GEO集聚类后,为了方便检测聚类结果,我们显示直接采用了 python 的 matplotlib 库以经纬度为坐标画出聚类结果,但发 ...
- 构建基于Chromium的应用程序(Winform程序加载Html页面)
chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...
- Docker的volume机制实现容器数据的持久性存储
1:可以启动一个容器的时候,临时指定挂载的volume,这个volume会自动创建,无需在宿主机上事先创建 docker run -it -v /busybox busybox:latest 登入到b ...
- Prism框架的优点
以我粗略的了解,prism/mvvm可以做到完全的逻辑和ui分离.即便是事件都是如此.这是主要优点.mvc是从本质上ui框架(当前大量半吊子把业务逻辑写在里面是不对的),mvvm包含客户端的业务逻辑. ...
- PHP 内置函数strlen 和mbstring扩展函数mb_strlen的区别
#EXAMPLE $str_uncode = "简体中文Chinese(Simplified)"; //统计字符串长度 echo strlen($str_uncode).'< ...
- three.js:Failed to execute 'texImage2D' on 'WebGLRenderingContext解决方案
three.js加载图片时,出现Failed to execute 'texImage2D' on 'WebGLRenderingContext .Tainted canvases may not b ...
- 【刷题】BZOJ 3524 [Poi2014]Couriers
Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...
- 手机H5显示一像素的细线
手机屏幕分辨率的问题,导致h5的1像素看起来比较粗,网上找了一个办法,记下来 主要就是通过scale来缩小宽度 .line1px{ border: none; border-botto ...