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

# Módulo WASM

El módulo central que implementa la funcionalidad básica de WASM en Angie: incluye
soporte para cargar entornos de ejecución alternativos y módulos WASM, así como
configurar sus características y límites.

Los demás módulos de esta sección amplían esta funcionalidad, permitiéndote
configurar y optimizar de forma flexible las capacidades de WASM para diversos escenarios y
requisitos.

En nuestros repositorios, el módulo se construye [dinámicamente](https://es.angie.software//angie/docs/installation/index.md#install-dynamicmodules)
y está disponible como un paquete independiente llamado `angie-module-wasm`.

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

## Ejemplo de configuración

```none
# Estas directivas cargan la funcionalidad principal
load_module modules/ngx_wasm_module.so;
load_module modules/ngx_wasm_core_module.so;

load_module modules/ngx_wasmtime_module.so;

# Disponible aquí: 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>

## Directivas

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

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

### load

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `load` file `id=`identifier [`fs=`host_path:guest_path]... [`api=`api]... [`type=``command` | `reactor`]   |
|--------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | —                                                                                                          |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | wasm_modules                                                                                               |

Carga un módulo desde un file del disco y le asigna un identifier único
(parámetro obligatorio). Durante la carga, se realiza una verificación para asegurar que el módulo
pueda ser instanciado.

La directiva admite los siguientes parámetros:

| `fs`   | Permite al huésped acceder a un directorio en el anfitrión.<br/>El parámetro puede especificarse varias veces para distintos directorios.                                                                                                                                                                                                                                                                                                   |
|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `api`  | Restringe explícitamente la lista de APIs permitidas para el módulo enumerándolas.<br/>Si el módulo intenta usar APIs no disponibles (no listadas aquí),<br/>se devuelve un error "API not found".<br/><br/>Por defecto, todas las APIs están disponibles para el módulo.                                                                                                                                                                   |
| `type` | Controla el ciclo de vida del módulo cargado.<br/><br/>- En modo `command`, la máquina se ejecuta una vez<br/>  y su estado se destruye después de la ejecución.<br/>- En modo `reactor`, la máquina funciona efectivamente de forma indefinida,<br/>  permitiendo que el código se ejecute varias veces.<br/>  Esto requiere una gestión cuidadosa de la memoria:<br/>  si los recursos no se liberan, pueden producirse fugas de memoria. |

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

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

### wasm_modules

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `wasm_modules` { ... };   |
|--------------------------------------------------------------------------------------------|---------------------------|
| Predeterminado                                                                             | —                         |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | main                      |

Una directiva de nivel superior que proporciona el contexto del archivo de configuración
en el que deben especificarse las directivas WASM.
Puede contener comandos para cargar módulos WASM y configurar parámetros
específicos para un entorno de ejecución concreto.
