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

# Модуль WASM

Основной модуль, реализующий базовую функциональность WASM в Angie: он включает
поддержку загрузки альтернативных сред выполнения и модулей WASM, а также
настройку их функций и ограничений.

Другие модули в этом разделе расширяют данную функциональность, позволяя гибко
настраивать и оптимизировать возможности WASM для различных сценариев и
требований.

В наших репозиториях модуль собран [динамически](https://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://angie.software//angie/docs/configuration/configfile.md#configfile)   | `load` file `id=`идентификатор [`fs=`путь_хоста:путь_гостя]... [`api=`api]... [`type=``command` | `reactor`]   |
|------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|
| По умолчанию                                                                             | —                                                                                                              |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | wasm_modules                                                                                                   |

Загружает модуль из файла на диске и назначает ему уникальный идентификатор
(обязательный параметр). Во время загрузки происходит проверка того, что модуль
можно инстанцировать.

Директива поддерживает следующие параметры:

| `fs`   | Позволяет гостю получить доступ к каталогу на хосте.<br/>Параметр может быть указан несколько раз для разных каталогов.                                                                                                                                                                                                                                                                           |
|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `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://angie.software//angie/docs/configuration/configfile.md#configfile)   | `wasm_modules` { ... };   |
|------------------------------------------------------------------------------------------|---------------------------|
| По умолчанию                                                                             | —                         |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | main                      |

Директива верхнего уровня, которая предоставляет контекст файла конфигурации,
в котором должны указываться директивы WASM.
Она может содержать команды для загрузки модулей WASM и настройки параметров,
специфичных для той или иной среды выполнения.
