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

OpenResty为什么选择Lua

最近研究Kong和apisix,他们2个居然都用OpenResty,于是我决定研究下

什么是 OpenResty ?

openResty是一个基于Nginx与LuaJIT的高性能WEB平台。它在Nginx基础上集成了LuaJIT虚拟机及一系列高质量第三方Nginx模块,让开发者能用 Lua 脚本直接在Nginx 内部编写业务逻辑,把Nginx从单纯的静态反向代理升级为可编译的web应用服务或动态网关。保留了Nginx强大的性能同时又增强了适配业务的灵活性。OpenResty 是一个整合的平台;

下面是OpenResty 和Nginx,Lua 之间的关系;

┌─────────────────────────────────────────────┐ │ OpenResty │ │ ┌─────────────────────────────────────┐ │ │ │ Nginx │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ ngx_lua 模块 │ │ │ │ │ │ ┌─────────────────────┐ │ │ │ │ │ │ │ LuaJIT │ │ │ │ │ │ │ │ ┌─────────────┐ │ │ │ │ │ │ │ │ │ Lua代码 │ │ │ │ │ │ │ │ │ └─────────────┘ │ │ │ │ │ │ │ └─────────────────────┘ │ │ │ │ │ └─────────────────────────────┘ │ │ │ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────┘

什么是Lua ?

Lua 是一门轻量级,可嵌入的脚本语言,设计的目的就是-好嵌入到别的程序里当胶水语言。它语法简单,运行快,体积小,在很多软件里都充当内置脚本引擎的角色。

1.极轻量
整个解释器编译完才1-200KB
源码也好集成进C/C++项目,所以很多游戏引擎,嵌入式设备都用它

2.语法简洁但够用,入门门槛低,很容易上手

3.结构简单但灵活
Lua只有一种复合数据结构-table,但它既能当数组用,又能当字典/对象用,非常灵活

4.与C/C++完美融合
Lua 的作者说过一句话:“Lua 不是一个独立的语言,而是一个库。”
Lua的ffi可以直接调用C

5.速度快
虽然是解释语言,但是LuaJIT让热点代码直接编译成本地机器码,性能接近C

为什么偏偏是Lua?

从lua的介绍就能看出来
1.Lua体积小
2.速度快
3.学习成本低
4.与C完美兼容

特性LuaPythonJS/V8GoPHP
极小嵌入体积
原生协程⚠️ async/await 非真协程❌ generator 不等同协程✅ goroutine 但调度独立
C 嵌入友好❌ C API 复杂且GIL受限❌ V8 API 重型且迭代快⚠️ CGO 有调用开销
高性能 JIT✅ LuaJIT⚠️ PyPy 难嵌入生产✅ V8 强但内存占用大✅ 编译为机器码(AOT)
FFI 直接调 C✅ LuaJIT FFI 零开销⚠️ ctypes 慢❌ 无原生FFI⚠️ CGO 跨边界有损耗
热加载package.loaded清除即生效✅ 重载模块可行✅ 模块缓存可清❌ 需重新编译✅ opcache 重置

核心架构

OpenResty 的架构可以分为三层:
1.宿主(host):增强版的Nginx内核,提供基于 epoll/kqueue的事件驱动,非阻塞I/O 模型,以及 Master-worker 进程管理。
2.引擎(Engine): LuaJIT 即时编译器,执行效率极高,提供Lua协程支持,可通过FFI直接调用C函数。
3.桥梁(Bridge):ngx_lua_module,将Lua解释器嵌入Nginx 的worker进程中,允许在不同请求处理阶段注入Lua代码。

http://www.cnnetsun.cn/news/3741483.html

相关文章:

  • STM32 ADC与DMA高效数据采集:原理、配置与实战避坑指南
  • Kinect v2与Unity集成:从环境配置到骨骼追踪的完整开发指南
  • 思源宋体CN完全指南:为什么7种字重开源字体是中文排版的最佳选择?
  • RLVR(可验证奖励强化学习)深度解析:从 GRPO 到 DAPO 的大模型推理能力训练新范式
  • 2026论文分阶段工具排行榜|开题/写作/降重/查重/答辩全覆盖✅
  • 软考高项论文写作全攻略:从理论到实战的45分通关秘籍
  • Pandas DataFrame.info() 方法深度解析:从数据诊断到内存优化
  • Kimi K3 API 返回空 content,不一定是中转坏了:先检查 max_tokens
  • 从C到C++:面向对象、内存管理与STL的实战进化指南
  • 深入解析USB Hub驱动:Linux内核中设备热插拔与管理的核心机制
  • 图片视频一键制作GIF动图,简单又好用!
  • 北方苍鹰优化算法改进与MATLAB实现
  • uni-app与uni-app X深度对比:从Web跨端到原生性能的架构演进
  • 基于Carsim与Matlab的轮胎参数实时估计算法实现
  • Simulink仿真单相全桥逆变电路:从SPWM原理到工程调试全解析
  • AutoWareAuto框架:自动驾驶开发的核心技术解析
  • 一份提示词,五重否定:Claude Opus 5 如何用工程语言承认「我不是人」-龍德明宇
  • 办公自动化工具 OpenClaw 搭建教学,2.7.9 版本整合包解压部署全流程(含安装包)
  • Flutter开发鸿蒙手写字体生成器的实践与优化
  • SpringBoot公交调度系统:算法优化与实时数据处理实践
  • 嵌入式UI开发实战:LVGL移植从原理到性能调优全解析
  • UE4视角控制:Pawn、SpringArm与Camera组件深度解析与实战调优
  • 高频注入法:无感电机低速定位的核心原理与工程实践
  • Avatar骨骼映射:让虚拟角色“活“起来的幕后魔法
  • Next.js 在 Web3 中的角色演变:从简单 DApp 前端到全栈链上应用的架构变迁
  • Unity游戏上架Steam全流程指南:从打包到部署的实战避坑
  • Firefox 153.0.1发布:修复多类崩溃与使用问题,部分Windows用户更新仍有隐患
  • Python机器学习入门:环境配置与核心算法精要
  • 多模态AI与数据库融合的三种架构模式:松散耦合、深度嵌入与原生化
  • 工业检测四层板电源完整性 PI 设计