当前位置: 首页 > 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.lryc.cn/news/615879.html

相关文章:

  • 系统集成项目管理工程师【第十一章 规划过程组】规划资源管理、估算活动资源、规划沟通管理和规划风险管理篇
  • 大模型时代的机器人研究趋势:从多模态融合到高效迁移
  • 在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合
  • Python爬虫实战:研究Ruia框架,构建博客园文章采集系统
  • reuse: for booting my spring project with mvn in Windows command line
  • String AOP、事务、缓存
  • Fish shell的abbr命令行参数介绍和Bat文件查看工具
  • Android 四大布局:使用方式与性能优化原理
  • Qt中的设计模式:经典的MVC,MVP和MVVM
  • 北京JAVA基础面试30天打卡06
  • 【webPack|Vite】了解常用配置,主要差异
  • 腾讯云EdgeOne Pages深度使用指南
  • 【后端】Java 8 特性 Optional 可选类 介绍
  • 7.企业级AD活动目录的备份与恢复策略
  • Celery分布式任务队列
  • opencv:图像轮廓检测与轮廓近似(附代码)
  • GoBy 工具联动 | GoBy AWVS 自动化漏扫工作流
  • 【15】OpenCV C++实战篇——fitEllipse椭圆拟合、 Ellipse()画椭圆
  • ubuntu超简单自动化Vim配置
  • (一)Tailwindcss
  • 从色彩心理学看嵌入式设备UI设计:原则、挑战与实践
  • Kafka 生产者与消费者分区策略全解析:从原理到实践
  • 阿里云ECS云服务器临时升级带宽方法
  • CentOS7挂载NTFS格式U盘
  • 安卓开发:组件化、模块化、插件化方案对比总结
  • ES 调优帖:Gateway 批量写入性能优化实践
  • Linux 系统中,如何处理信号以避免竞态条件并确保程序稳定性?
  • doubletrouble靶机
  • MVCC和日志
  • Spring Boot整合knife4j实战