因此,诞生了 OpenResty。用户可以直接使用 Lua 脚本动态扩展功能而无需重新编译服务器。目前主要应用在API网关等场景中。LuaJIT 所提供的高效的脚本执行能力,使得网关更容易处理动态内容以及更加复杂的逻辑,并且 Lua 开发更加灵活。但是,使用 Lua 作为 Nginx的扩展脚本可能也是无奈之举,在脚本语言中 JavaScript 的强大扩...
工程师们可以为模块做同样的事情,这样当 HTML 解析和重写在响应阶段运行时,在请求阶段初始化的设置就在那里。下面是一个可用于获取请求的示例函数: 这是生成 Nginx 模块所需的模块定义的一部分的类型结构。一旦有了这个,就可以将它指向包含想要的任何设置的结构。例如,下面是使用 LuaJIT 的 FFI 工具从 Lua 通过 ...
例如,下面是使用 LuaJIT 的 FFI 工具从 Lua 通过 FFI 到 Rust 模块启用电子邮件混淆功能的实际函数: #[no_mangle]pub extern "C" fn rofl_module_email_obfuscation_new(request: &mut ngx_http_request_t,dry_run: bool,decode__url: *const u8,decode__url_len: usize,) {let ctx = context::get_...
FFI (Foreign Function Interface) 翻译过来叫做外部函数接口(为了比较简单,下文中都将使用 FFI 指代)。最早来自于 Common Lisp 的规范,这是在 wiki 上写的,我并没有去考证。 不过我所使用过的绝大多数语言中都有 FFI 的概念/术语存在,比如:Python、Ruby, Haskell、Go、Rust、LuaJIT 等。 FFI 的作用简单来说...
FFI (Foreign Function Interface) 翻译过来叫做外部函数接口(为了比较简单,下文中都将使用 FFI 指代)。最早来自于 Common Lisp 的规范,这是在 wiki 上写的,我并没有去考证。 不过我所使用过的绝大多数语言中都有 FFI 的概念/术语存在,比如:Python、Ruby, Haskell、Go、Rust、LuaJIT 等。
这一点对于http请求承载大量数据的应用来说很痛苦。例如我在K公司实现文件服务器的功能,这个文件服务器不能直接委托给nginx的file send,因为要对原始文件数据做处理,例如md5校验。这也是为什么openresty后面慢慢提供一些通过luajit ffi来实现的api接口,就是为了减少拷贝,提高性能。
这一点对于http请求承载大量数据的应用来说很痛苦。例如我在K公司实现文件服务器的功能,这个文件服务器不能直接委托给nginx的file send,因为要对原始文件数据做处理,例如md5校验。这也是为什么openresty后面慢慢提供一些通过luajit ffi来实现的api接口,就是为了减少拷贝,提高性能。
FFI (Foreign Function Interface) 翻译过来叫做外部函数接口(为了比较简单,下文中都将使用 FFI 指代)。最早来自于 Common Lisp 的规范,这是在 wiki 上写的,我并没有去考证。不过我所使用过的绝大多数语言中都有 FFI 的概念/术语存在,比如:Python、Ruby, Haskell、Go、Rust、LuaJIT 等。
luajit-to-rust node-to-rust perl-to-rust php-to-rust python-to-rust ruby-to-rust rust-to-c rust-to-cmake rust-to-cpp rust-to-fortran rust-to-go-dynamic swift-to-rust .gitignore README.md Rust FFI Examples This is an example repository that shows how to interface between Rust and...
mlua-rs/mlua - High level Lua 5.4/5.3/5.2/5.1 (including LuaJIT) and Roblox Luau bindings to Rust with async/await support tickbh/td_rlua [td_rlua] - Zero-cost high-level lua 5.3 wrapper for Rust tomaka/hlua - Rust library to interface with Lua mruby anima-engine/mrusty - ...