一 特权进程和定时任务
说明: 本文的特性超越'nginx'特性
① 概要
② 定时任务
'思考1': 如何突破 init_worker_by_lua 中'不能'使用 cosocket 的限制?
说明: 通过 ngx.timer '实现'
'思考2':基于 'ngx.timer.at' 这个 API,如何做到'周期性'运行? --> "思考的递进"
'思考3':指令 lua_max_pending_timers 和 lua_max_running_timers '限制'?
③ 特权进程
案例1:开启'特权进程'的demo1
1、process.enable_privileged_agent() 函数
备注: 使用'上下文'是 init_by_lua, 也会在 init_by_worker 阶段执行
补充: 可以用 'process.type()' 函数判断自己'是否'是特权进程
案例2:开启'特权进程'的demo2
参数'premature': nginx '重启'或者'关闭'的时候,就'不要'再去创建 timer 了
答疑: 特权进程的'权限'
补充: init_by_lua* 阶段是'openresty' 启动用户的权限,不依赖'enable_privileged_agent'
④ 非阻塞的 ngx.pipe
了解: 官方库'lua-resty-shell'的底层原理
⑤ ngx.worker和ngx.process SDK
关注: nginx自身的'$pid 变量'、'提供directive 指令'、openresty提供的'API'
lua-nginx-module --> 'ngx.worker.*'
lua-resty-core --> 'ngx.process.*'
⑥ 小结
⑦ 思考题
案例:可以通过'查看worker id',在'指定worker下'执行
eg: ngx.worker.id() == 0 判断是'第一个'worker