<!-- review: finished -->

<a id="wasm-core"></a>

# WASM 模块

核心模块实现了 Angie 中的基本 WASM 功能：
这包括支持加载替代运行时和 WASM 模块，
以及配置它们的特性和限制。

本节中的其他模块扩展了此功能，使您能够
灵活配置和优化各种场景和需求的 WASM 特性。

在我们的代码库中，该模块构建为
[动态](https://cn.angie.software//angie/docs/installation/index.md#install-dynamicmodules)，
并作为一个名为 `angie-module-wasm` 的独立包提供。

<a id="configuration-example-75"></a>

## 配置示例

```none
# 这些指令加载核心功能
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";
        }
    }
}
```

<a id="directives-84"></a>

## 指令

<a id="index-0"></a>

<a id="load"></a>

### load

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `load` file `id=`identifier [`fs=`host_path:guest_path]... [`api=`api]... [`type=``command` | `reactor`]   |
|--------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|
| 默认                                                                                   | —                                                                                                          |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | wasm_modules                                                                                               |

从磁盘 file 加载模块并为其分配一个唯一的 identifier （必需参数）。
在加载过程中，将验证模块以确保它可以实例化。

该指令支持以下参数：

| `fs`   | 允许客户端访问主机上的目录。<br/>可以为不同的目录多次指定该参数。                                                                                                                            |
|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `api`  | 通过列出API明确限制模块允许使用的API列表。<br/>如果模块尝试使用不可用的API（未在此处列出），<br/>将返回"API未找到"错误。<br/><br/>默认情况下，所有API都可用于模块。                                                           |
| `type` | 控制加载模块的生命周期。<br/><br/>- 在 `command` 模式下，机器执行一次<br/>  并在执行后销毁其状态。<br/>- 在 `reactor` 模式下，机器有效地无限期运行，<br/>  允许代码多次执行。<br/>  这需要仔细的内存管理：<br/>  如果资源未被释放，可能会发生内存泄漏。 |

<a id="index-1"></a>

<a id="wasm-modules"></a>

### wasm_modules

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `wasm_modules` { ... };   |
|--------------------------------------------------------------------------------------|---------------------------|
| 默认                                                                                   | —                         |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | main                      |

一个顶级指令，提供了应该指定WASM指令的配置文件上下文。
它可以包含用于加载WASM模块的命令和配置特定运行时参数的命令。
