当前位置: 首页 > news >正文

nginx下lua的实现机制、Lua错误处理、面向对象

nginx下lua的实现机制

nginx+lua概述

nginx:功能由模块提供。 http模块、events模块,mail模块。

处理http请求的时候,可以利用模块做一些功能:eg:登录校验,js合并,数据库访问,鉴权。 c或者c++。

lua的解释器,集成到了nginx当中:ngx_lua模块

lua内部,内建了协程。

nginx启动流程

工作流程:启动流程,管理进程流程,工作进程流程。

启动流程

1。框架程序的启动。创建模块的过程。

2。模块的启动。模块的启动和初始化的过程。

./nginx

1。 nginx接受启动参数、解析参数。

2。判断是否有 -s。如果有-s重新加载 新的配置文件。

3。调用核心模块create_conf方法,基于配置文件,创建数据结构(用于存储配置)做初始化。

4。解析nginx.conf配置项,存到上面的数据结构中。

5。调用每个模块的init_conf方法,进行初始化。

6。如果配置文件中,有关于日志,缓存等的配置,对这些文件进行创建。

7。按照配置,开始监听端口,一般比如http模块,stream模块。

8。调用所有模块的init_module方法,根据配置信息进行初始化模块。

9。如果配置文件配置,nginx为master模式。创建管理进程。

 

10。管理进程根据配置的工作进程数,将所有进程分叉,让他们独立接受用户的请求。

11。管理进程调用模的init_process方法,这样工作进程就启动了。工作进程进入自己的消息循环 中,开始等待处理用户的请求。

管理进程和工作进程

管理进程:管理工作进程。自己实现:重启服务,平滑升级( -s reload),更换日志文件,动态加 载配置。不处理用户的请求。

工作进程:干活的,处理用户的请求,协调各个模块完成任务。由 管理进程管理。

nginx+lua请求处理流程

ngx_lua,生效于 工作进程。

模型:一个请求,一个协程。

错误处理

语法错误:

-- 错误处理 a==10

for a = 1,10 print(a)

end

程序无法运行。

运行错误:

错误处理 assert和error

assertfunction add(a,b)assert(b,"b是nil")endadd(1)assert:第一个参数为true,不输出第二个参数。 第一个参数为false,输出第二个参数。errorfunction add(a,b)  if(not b) thenerror("报error了")endprint("正常执行") endadd(1,"a")当error和assert,触发错误时,程序退出。

错误处理pcall

pcall(要执行的函数,函数需要的参数)

如果函数执行没问题,返回true    如果函数执行有问题,返回false。

function add(a,b) c = a+b

print("正常执行") end

if pcall(add,1) then

print("add 正常") else

print("add 错误") end

print("主程序")

错误处理xpcall

function testXpcall()

c = 1+5 end

function testErrorHandle(error)

print("我来处理错误",error) end

xpcall(testXpcall,testErrorHandle)

面向对象

对象:属性、方法。table,function。student = {name = "张三",age = 18, gotoSchool = function(name)print(name.."上学") end}--[[student.gotoSchool = function(name)print(name.."上学") endfunction student.gotoSchool(name)print(name.."上学") end]]--print("学生姓名:"..student.name..",年龄是:"..student.age) student.gotoSchool(student.name)

技巧冒号

1。类比:一个类,实例化多个对象。

http://www.dtcms.com/a/323775.html

相关文章:

  • Flutter 与 Android NDK 集成实战:实现高性能原生功能
  • 结构化记忆、知识图谱与动态遗忘机制在医疗AI中的应用探析(上)
  • 随机向量正交投影定理(Orthogonal Projection Theorem, OPT)_学习笔记
  • LLaMA-Adapter Efficient Fine-tuning of Language Models with Zero-init Attention
  • C++高频知识点(二十)
  • 数据库删除术:逻辑删除 vs 物理删除,选错毁所有
  • Flink提交流程全解析:从模式到实践
  • Java高并发场景下的缓存穿透问题定位与解决方案
  • 计算机网络:子网的起始地址就是默认的网络地址吗?
  • Flink SQL 中的水印机制
  • 26.Scikit-learn实战:机器学习的工具箱
  • Unity笔记(四)——Camera、碰撞检测函数、刚体加力、音频
  • CSDN 五周年创作纪念日(PS:vnjohn)
  • C++设计模式单例模式(饿汉、懒汉模式)
  • 基于 RabbitMQ 死信队列+TTL 实现延迟消息+延迟插件基本使用
  • 检索召回率优化探究五(BGE-M3 混合检索):基于LangChain0.3 集成Milvu2.5 向量数据库构建的智能问答系统
  • 【Matplotlib】中文显示问题
  • Vue3 组件化开发
  • 第4章 程序段的反复执行1 for语句P115练习题(题及答案)
  • 堆----3.数据流的中位数
  • 第4章 程序段的反复执行2 while语句P128练习题(题及答案)
  • 2025AI颠覆认知!解锁智能新纪元
  • Kubernetes 无法识别你定义的 `CronJob` 资源*逐步解决方案
  • AI推理的“灵魂五问”:直面2025算力鸿沟与中国的破局之路
  • PowerShell 入门系列(五):运行命令与命令剖析详解
  • 面试题-----Spring Cloud
  • n8n 入门指南:更适合跨境出海搞钱的AI智能体
  • 7天精通Coze智能体实操手册(Day 1)
  • 健全性测试(Sanity Testing):你软件的快速“体检” ✅(省时避坑,确保核心!)
  • 【三个数绝对值排序】2022-10-10