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

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.xdnf.cn/news/17620.html

相关文章:

  • Unity 遮挡显示效果 Shader
  • 异步问题的概念和消除问题技巧
  • 机器学习 DBScan
  • Java语言简介
  • 《算法导论》第 17 章 - 摊还分析
  • 【Docker进阶实战】从多容器编排到集群部署
  • 谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境
  • 【PyTorch】单目标检测项目部署
  • BGP知识点总结
  • MACBOOK M1安装达梦8数据库
  • 机器学习实战·第三章 分类(1)
  • 组合期权:对角价差
  • Python描述符进阶:自定义文档与属性删除的艺术
  • 2025年全国青少年信息素养大赛Scratch编程践挑战赛-小高组-初赛-模拟题
  • P3232 [HNOI2013] 游走,solution
  • redis 全局命令、数据结构和内部编码、单线程架构
  • 深入理解C语言一维数组的本质:数组名、指针常量与访问细节
  • 250810-OpenWebUI集成Dify应用
  • uboot使用指南
  • 分布微服务电商订单系统Rust编码开发[下]
  • MySQL的逻辑架构和SQL执行的流程:
  • Stream流应用
  • MPLS特性之PHP(Penultimate Hop Popping)
  • afsim2.9_使用QtCreator和VSCode编译
  • 【杂谈】-智能代理+可观察性:构建下一代复杂系统监控体系
  • 《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》
  • AUTOSAR进阶图解==>AUTOSAR_ASWS_TransformerGeneral
  • 关于linux操作系统下的文件操作方法:
  • ThinkPHP8学习篇(二):路由
  • 20250810 | 深度学习入门笔记1