lua-resty-core
基于 FFI 的 Lua API 用于 ngx_lua 模块
$ opm get Valdanitooooo/lua-resty-core
名称
lua-resty-core - 基于 FFI 的 Lua API 用于 ngx_http_lua_module 和/或 ngx_stream_lua_module
状态
此库已准备好投入生产。
概要
从 OpenResty 1.15.8.1 开始,此库默认自动加载。可以通过 lua_load_resty_core 指令禁用此行为,但请注意,强烈建议使用此库,因为它的 FFI 实现比 ngx_lua 模块的 Lua C API 更快、更安全且更完整。
如果您使用的是旧版本的 OpenResty,则必须像这样加载此库
# nginx.conf
http {
# you do NOT need to configure the following line when you
# are using the OpenResty bundle 1.4.3.9+.
lua_package_path "/path/to/lua-resty-core/lib/?.lua;;";
init_by_lua_block {
require "resty.core"
collectgarbage("collect") -- just to collect any garbage
}
...
}
描述
此纯 Lua 库重新实现了 ngx_lua 模块的 Nginx API for Lua 的一部分,并使用 LuaJIT FFI 将新的基于 FFI 的 Lua API 安装到 ngx_lua 模块使用的 ngx. 和 ndk. 命名空间中。
此外,此 Lua 库将 ngx_lua 模块的任何重要的新的 Lua API 作为适当的 Lua 模块实现,例如 ngx.semaphore 和 ngx.balancer。
基于 FFI 的 Lua API 可以与 LuaJIT 的 JIT 编译器一起使用。ngx_lua 的默认 API 基于标准 Lua C API,它永远不会被 JIT 编译,并且用户 Lua 代码始终被解释(缓慢)。
对新的 ngx_stream_lua_module 的支持也已开始。
此库默认与 OpenResty 包捆绑在一起。因此,您无需担心依赖项和要求。
先决条件
警告 此库包含在每个 OpenResty 版本中。您应该使用您正在使用的特定 OpenResty 版本中捆绑的库版本。否则,您可能会遇到严重的兼容性问题。
LuaJIT 2.1(目前,它是官方 luajit-2.0 git 存储库中的 v2.1 git 分支:http://luajit.org/download.html)
ngx_http_lua_module v0.10.25。
ngx_stream_lua_module v0.0.13。
安装
默认情况下,LuaJIT 会在 /usr/local/share/lua/5.1/ 中搜索 Lua 文件。但是 make install
会将此模块安装到 /usr/local/lib/lua 中。因此,您可能会发现类似这样的错误
nginx: [alert] failed to load the 'resty.core' module
您可以使用以下命令安装此模块以解决上述问题。
cd lua-resty-core
sudo make install LUA_LIB_DIR=/usr/local/share/lua/5.1
您也可以使用 LUA_LIB_DIR 参数将安装目录更改为您喜欢的任何其他目录。
cd lua-resty-core
sudo make install LUA_LIB_DIR=/opt/nginx/lualib
之后,您需要将上述目录添加到 http 上下文和 stream 上下文中使用 lua_package_path
nginx 指令的 LuaJIT 搜索目录中。
lua_package_path "/opt/nginx/lualib/?.lua;;";
已实现的 API
resty.core.hash
resty.core.base64
resty.core.uri
resty.core.regex
resty.core.exit
resty.core.shdict
resty.core.var
resty.core.ctx
get_ctx_table
语法: ctx = resty.core.ctx.get_ctx_table(ctx?)
类似于 ngx.ctx,但它接受一个可选的 ctx
参数。当 ctx
表不存在时,它将使用调用方的 ctx
而不是创建一个新的表。
注意:ctx
表将在当前请求的整个生命周期中使用。在尝试重用 ctx
表时,请务必小心。在其他地方重用 ctx
表之前,您需要确保当前请求中没有 Lua 代码正在使用或将要使用 ctx
表。
resty.core.request
resty.core.response
resty.core.misc
resty.core.time
resty.core.worker
resty.core.phase
resty.core.ndk
resty.core.socket
resty.core.param
ngx.arg(仅限获取)
ngx.semaphore
此 Lua 模块实现了用于高效“轻量级线程”同步的信号量 API,它可以在不同的请求之间工作(但不能跨 nginx 工作进程)。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.balancer
此 Lua 模块用于在 Lua 中定义动态上游负载均衡器。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.ssl
此 Lua 模块提供了一个 Lua API,用于在 NGINX 下游 SSL 握手过程中控制 SSL 证书、私钥、SSL 协议版本等。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.ssl.clienthello
此 Lua 模块提供了一个 Lua API,用于后处理 NGINX 下游 SSL 连接的 SSL 客户端 hello 消息。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.ssl.session
此 Lua 模块提供了一个 Lua API,用于操作 NGINX 下游 SSL 连接的 SSL 会话数据和 ID。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.re
此 Lua 模块提供了一个 Lua API,它实现了 ngx.re
API 的便捷实用程序。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.resp
此 Lua 模块提供可用于处理 HTTP 响应的 Lua API。
有关此 Lua 模块的更多详细信息,请参阅 文档。
ngx.pipe
此模块提供了一个 Lua API,用于以非阻塞方式生成进程并与之通信。
有关此 Lua 模块的更多详细信息,请参阅 文档。
此模块最早在 lua-resty-core v0.1.16 中引入。
ngx.process
此 Lua 模块用于在 Lua 中管理 nginx 进程。
有关此 Lua 模块的更多详细信息,请参阅 文档。
此模块最早在 lua-resty-core v0.1.12 中引入。
ngx.errlog
此 Lua 模块提供 Lua API 来捕获和管理 nginx 错误日志消息。
有关此 Lua 模块的更多详细信息,请参阅 文档。
此模块最早在 lua-resty-core v0.1.12 中引入。
ngx.base64
此 Lua 模块提供 Lua API 用于 urlsafe base64 编码/解码。
有关此 Lua 模块的更多详细信息,请参阅 文档。
此模块最早在 lua-resty-core v0.1.14 中引入。
注意事项
如果用户 Lua 代码未进行 JIT 编译,则使用此库可能会导致解释模式下的性能下降。只有当您的用户 Lua 代码的大部分被 JIT 编译时,您才会观察到加速。
待办事项
使用 FFI 重新实现
ngx_lua
的 cosocket API。使用 FFI 重新实现
ngx_lua
的ngx.eof
和ngx.flush
API 函数。
作者
章亦春 (Yichun "agentzh" Zhang) <agentzh@gmail.com>,OpenResty Inc。
版权和许可
此模块根据 BSD 许可证发布。
版权所有 (C) 2013-2019,由章亦春 (Yichun "agentzh" Zhang),OpenResty Inc。
保留所有权利。
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。
二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。
本软件由版权持有人和贡献者“按原样”提供,并且任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证,均被排除在外。在任何情况下,版权持有人或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断)负责,无论这些损害是基于合同、严格责任或侵权(包括疏忽或其他)理论,即使已被告知此类损害的可能性,也与本软件的使用有任何关系。
另请参阅
ngx_lua 模块:https://github.com/openresty/lua-nginx-module#readme
LuaJIT FFI:http://luajit.org/ext_ffi.html
作者
valdanito
许可证
2bsd
依赖项
openresty/lua-resty-lrucache >= 0.08,luajit >= 2.1.0,nginx >= 1.13.6,ngx_http_lua >= 0.10.13
版本
-
Valdanitooooo/lua-resty-core 0.1.29基于 FFI 的 Lua API 用于 ngx_lua 模块 2024-08-28 03:56:24