WASM 模块#
核心模块实现了 Angie 中的基本 WASM 功能: 这包括支持加载替代运行时和 WASM 模块, 以及配置它们的特性和限制。
本节中的其他模块扩展了此功能,使您能够 灵活配置和优化各种场景和需求的 WASM 特性。
在我们的代码库中,该模块构建为
动态,
并作为一个名为 默认 — wasm_modules 从磁盘 file 加载模块并为其分配一个唯一的 identifier (必需参数)。
在加载过程中,将验证模块以确保它可以实例化。 该指令支持以下参数: 允许客户端访问主机上的目录。
可以为不同的目录多次指定该参数。 通过列出API明确限制模块允许使用的API列表。
如果模块尝试使用不可用的API(未在此处列出),
将返回"API未找到"错误。 默认情况下,所有API都可用于模块。 控制加载模块的生命周期。 在 在 一个顶级指令,提供了应该指定WASM指令的配置文件上下文。
它可以包含用于加载WASM模块的命令和配置特定运行时参数的命令。angie-module-wasm
的独立包提供。配置示例#
# 这些指令加载核心功能
load_module modules/ngx_wasm_module.so;
load_module modules/ngx_wasm_core_module.so;
load_module modules/ngx_wasmtime_module.so;
# 可在此处找到: https://git.angie.software/web-server/angie-wasm
load_module modules/ngx_http_wasm_host_module.so;
events {
}
wasm_modules {
#use wasmtime;
load ngx_http_handler.wasm id=handler;
load ngx_http_vars.wasm id=vars type=reactor;
}
http {
wasm_var vars "ngx:wasi/var-utils#sum-entry" $rvar $arg_a $arg_b $arg_c $arg_d;
server {
listen *:8080;
location / {
return 200 "sum('$arg_a','$arg_b','$arg_c','$arg_d')=$rvar\n";
}
location /wasm {
client_max_body_size 20M;
wasm_content handler "ngx:wasi/http-handler-entry#handle-request";
}
}
}
指令#
load#
load
file id=
identifier [fs=
host_path:guest_path]... [api=
api]... [type=
command
| reactor
]fs
api
type
command
模式下,机器执行一次
并在执行后销毁其状态。reactor
模式下,机器有效地无限期运行,
允许代码多次执行。
这需要仔细的内存管理:
如果资源未被释放,可能会发生内存泄漏。wasm_modules#