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.pswp.cn/web/92618.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure基于中继器实现的组件库(导航菜单、动态表格)

摘要 本文将为您详细介绍基于 Axure 的中继器组件库中的 9 个独特组件,这些组件不仅能够极大地提升您的原型设计效率,还能为您的项目增添令人惊叹的交互效果和视觉呈现。 引言 在当今快速发展的数字产品设计领域,原型设计工具的革新不断推动着…

Kafka 生产者与消费者分区策略全解析:从原理到实践

一、生产者分区策略1.1 分区好处(1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。&#xff0…

高频面试点:深入理解 TCP 三次握手与四次挥手

在网络通信的世界里,TCP(Transmission Control Protocol,传输控制协议)是确保数据可靠传输的基石。其中,三次握手建立连接、四次挥手断开连接的过程,更是 Java 秋招面试中的高频考点。今天,我们就深入剖析这两个关键过程,结合原理、代码示例与面试真题,帮你吃透知识点…

k8s-nfs实现创建sc的两种方式

法一:基于 官方 NFS CSI 插件 法二:基于 nfs-subdir-external-provisioner 法一 官方 NFS CSI 插件 大致步骤# 安装 NFS sudo apt update sudo apt install -y nfs-kernel-server # 创建共享目录 sudo mkdir -p /data/nfs sudo chmod 777 /data/nfs # 配…

n8n 入门指南:更适合跨境出海搞钱的AI智能体

如果你最近刷到 AI 圈的分享应该会发现——n8n 又火起来了。其实 n8n 早在 2020 年左右就被程序员玩过一波,当时很多人拿它做网站自动发邮件、消息转发之类的“流程自动化”。但那时候 AI 还没这么卷,大家也没觉得多有用。n8n为什么最近又翻红&#xff1…

【数据分享】各省农业土地流转率(2010-2023)

数据介绍土地流转是推动农业规模化、现代化发展的关键机制。为助力相关研究,现分享一份覆盖全国30个省级行政区、时间跨度为2010-2023年的农业土地流转率面板数据集。本数据直接提取自权威统计年报,具有较高的参考价值。一、数据概览覆盖范围&#xff1a…

音视频时间戳获取与同步原理详解

引言:为什么音视频同步如此重要? 在音视频技术领域,"同步"是决定用户体验的核心要素。想象一下观看电影时画面与声音错位0.5秒的场景:角色说话时嘴唇动作与声音不匹配,爆炸场景的视觉冲击先于音效到达——这…

Day38--动态规划--322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结

Day38–动态规划–322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结 今天的是几道经典的“完全背包”题目。前两道题目,要区分求的是“价值”,还…

应用层Http协议(1)

应用层Http协议(1) 在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传…

elementui input无法输入问题

背景。开发小程序。自定义表单在pc段设置好input输入框属性后。 在小程序端无法输入原因:长度受限制,导致input组件的maxlength属性认为长度是0导致无法输入任何值。看解释是应为遇到空字符串等情况会设置为0解决。因为未找到设置maxlength为0处&#xf…

算法_python_学习记录_02

算法学习和视频学习过程中,有许多前几天还不知道的知识点,现在一点一点归纳整理出来,稳步前进,前进~ 20_贪心算法系列题 00_参考文档 详解贪心算法(Python实现贪心算法典型例题)_顺序贪婪算法-CSDN博客P…

Meta AI水印计划的致命缺陷——IEEE Spectrum深度文献精读

一、原文信息 标题: Metas AI Watermarking Plan Is Flimsy, at Best 中文译名: Meta的AI水印计划脆弱不堪 作者: David Evan Harris(加州大学伯克利分校)、Lawrence Norden(纽约大学法学院) 发表日期: 2024年3月5日 发表期刊: IEEE Spectrum 二、原文全文翻译 Met…

gpt-oss 全量技术解读

一、概述 gpt-oss 是 OpenAI 发布的开放权重(open-weight)模型系列,面向强推理、Agent 能力与多样化应用场景。 提供两种规格: gpt-oss-120b:面向生产与高推理需求,单卡 80GB GPU(如 NVIDIA …

实现EtherNet/IP网络与Modbus TCP网络之间数据互通

硬件连接与配置使用工业以太网网关(如ENE-350)作为桥接设备,通过以太网交换机实现硬件互联。 网关需根据应用场景配置为EtherNet/IP从站或Modbus TCP主/从站模式。案例1:EtherNet IP主站PLC和Modbus TCP主站PLC的互联网关配置&…

zookeeper因jute.maxbuffer启动异常问题排查处理

#作者:程宏斌 文章目录一、前言二、问题描述三、定位过程四、问题根因五、解决方案根本解决方案应急处理方案调大参数可能出现的问题六、总结为什么超出会报错官方对于jute.maxbuffer的解释注意事项官方建议一、前言 在分布式系统中,ZooKeeper作为关键的…

Java基础十三: List

目录 1.Java LinkedList 的高级应用与示例 1.1 LinkedList的基本使用 基本操作示例 1.2 LinkedList独有的方法 特定方法示例 1.3 队列模式(先进先出) 队列模式示例 1.4 栈模式(先进后出) 栈模式示例 总结 2.Java Vecto…

[机器学习]03-基于核密度估计(KDE)的鸢尾花数据集分类

关键点:使用核密度估计(KDE) 估计类别条件概率密度(高斯核,带宽0.2)采用最大后验概率(MAP) 决策准则进行分类程序代码:import random import matplotlib from sklearn.ne…

jmeter怎么实现多个请求真正的同时发送

1.首先在插件管理器Plugins Manager中搜索插件Parallel Controller&Sampler,勾选上对应的插件后,在右下角点击Apply Changes and Restart JMeter,安装插件2.插件安装完毕后,然后在线程组上面右击,点击添加--逻辑控…

复杂环境下车牌识别准确率↑29%:陌讯动态特征融合算法实战解析

原创声明本文为原创技术解析,核心技术参数与架构设计引用自《陌讯技术白皮书》,转载需注明来源。一、行业痛点:车牌识别的现实挑战在智慧交通、停车场管理等场景中,车牌识别作为关键技术环节,长期面临多重环境干扰。据…

Express中间件和路由及响应方法

1.中间件分类 应用程序级别中间件 通过 app.use() 或 app.METHOD()(如 app.get)绑定的中间件,作用于整个应用程序。例如 记录请求日志、解析请求体等全局功能。例如: app.use((req, res, next) > {console.log(Request URL:…