语法: 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:
<script src="https://gist.github.com/Tinywan/8cff39afc1b512ca5bfa62a329e10506.js"></script>
 
通过 Lua 操作 Http 头

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 指令的更多相关文章

  1. #pragma 预处理指令详解

    源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma  预处理指令详解              在所有的预处理指令中, ...

  2. [转]JVM指令详解(上)

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码    助记符      ...

  3. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  4. rsync指令详解

    rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...

  5. 迈向angularjs2系列(2):angular2指令详解

    一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...

  6. LDM与STM指令详解

    title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...

  7. C#中的预处理指令详解

    这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...

  8. pragma comment的使用 pragma预处理指令详解

    pragma comment的使用 pragma预处理指令详解   #pragma comment( comment-type [,"commentstring"] ) 该宏放置一 ...

  9. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

  10. nginx.conf中关于nginx-rtmp-module配置指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

随机推荐

  1. thinkphp学习2-控制器

    1.定义控制器 一般来说,ThinkPHP的控制器是一个类,而操作则是控制器类的一个公共方法. 控制器通常需要继承系统的Controller类或者其子类,例如,下面定义了一个 \Home\Contro ...

  2. 软工网络15团队作业8——Beta阶段敏捷冲刺(Day4)

    提供当天站立式会议照片一张 每个人的工作 1.讨论项目每个成员的昨天进展 赵铭: 在知晓云上建立数据表 吴慧婷:做了背单词界面并学习了词库界面的设计. 陈敏: 我的词库-全部词汇功能/新建词汇功能全部 ...

  3. PAT 甲级 1143 Lowest Common Ancestor

    https://pintia.cn/problem-sets/994805342720868352/problems/994805343727501312 The lowest common ance ...

  4. 用node研究axios前后端交互状态码规则

    研究状态码规则围绕我的脑袋有些时间了. 加上最近比较不忙,开始了这方面的研究. 后端用的是直接跑过的node框架,express.可以直接参考express官方网站:http://www.expres ...

  5. mysqldumpslow 分析slow query日志和explain分析mysql查询结构

    mysqldumpslow的使用:比如我们要查询按时间返回前5条日志信息,格式如下:mysqldumpslow -s t -t 5 /var/log/mysql/slowquery_20180303. ...

  6. Android事件分派机制

    最近一直在学习Android里面的事件分派机制,感觉很奇妙,看了很多博客和分析,才在脑子里形成了一个模糊的概念,对事件分派有了一定的认识. 于是,我画了一个图来简单明了的表述Android中事件的分派 ...

  7. 自己用过的web软件tools软件以及玩过的游戏

    三年大学世界 最经常用的web网站估计就是淘宝了   最经常使用的工具软件也就是   Microsoft office,而最经常玩的游戏就是英雄联盟了一款pvp对战游戏 淘宝自不必说 可以称为国内最大 ...

  8. Linux环境下安装配置Mysql

    首先我们的使用的是linux的 centOS6 版本 安装mysql: 1.查看有没有安装包 yum list mysql* 2.进行安装mysql:一般我们在服务器端安装的都是服务端( mysql- ...

  9. todomvc-app

    1.HTML <!doctype html> <html lang="en"> <head> <meta charset="ut ...

  10. view的阴影效果shadowColor

    btn.layer.shadowColor = UIColor.blackColor().CGColor btn.layer.shadowOffset = CGSizeMake(5, 5) btn.l ...