WASM 模块#
核心模块实现了 Angie 中的基本 WASM 功能: 这包括支持加载替代运行时和 WASM 模块, 以及配置它们的特性和限制。
本节中的其他模块扩展了此功能,使您能够 灵活配置和优化各种场景和需求的 WASM 特性。
在我们的代码库中,该模块构建为
动态,
并作为一个名为 默认 — wasm_modules 从磁盘 file 加载模块并为其分配一个 id (必需)。
在加载过程中,将验证模块以确保它可以实例化。 该指令具有以下参数: 允许来宾访问主机上的目录。
可以为不同的目录多次指定。 为可用于模块的 API 启用白名单模式
并指定这些 API。
如果模块尝试使用受限 API(即未在此列出),
将返回“未找到 API”错误。 默认情况下,模块可以访问所有 API。 控制加载模块的生命周期。 在 在 reactor 模式下,机器有效地无限期运行,
允许多次代码执行。
这需要仔细的内存管理:
如果未清理资源,可能会发生内存泄漏。 一个顶级块指令
提供了配置文件上下文
在其中应指定 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;
load_module modules/ngx_http_wasm_content_module.so;
load_module modules/ngx_http_wasm_vars_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=
id [fs=
host_path:guest_path]... [api=
api]... [type=
command
| reactor
]fs
api
type
command
模式下,机器运行一次
并在执行后销毁其状态。wasm_modules#