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

# Módulo WASM

O módulo principal que implementa a funcionalidade básica do WASM no Angie: inclui
suporte para carregamento de runtimes alternativos e módulos WASM, bem como
configuração de seus recursos e limites.

Os outros módulos nesta seção estendem essa funcionalidade, permitindo que você
configure e otimize flexivelmente as capacidades do WASM para vários cenários e
requisitos.

Em nossos repositórios, o módulo é construído [dinamicamente](https://pt.angie.software//angie/docs/installation/index.md#install-dynamicmodules)
e está disponível como um pacote separado chamado `angie-module-wasm`.

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

## Exemplo de Configuração

```none
# Essas diretivas carregam a funcionalidade principal
load_module modules/ngx_wasm_module.so;
load_module modules/ngx_wasm_core_module.so;

load_module modules/ngx_wasmtime_module.so;

# Disponível aqui: 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>

## Diretivas

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

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

### load

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `load` arquivo `id=`identificador [`fs=`caminho_host:caminho_convidado]... [`api=`api]... [`type=``command` | `reactor`]   |
|-------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| Padrão                                                                                    | —                                                                                                                          |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | wasm_modules                                                                                                               |

Carrega um módulo de um arquivo no disco e atribui a ele um identificador
único (parâmetro obrigatório). Durante o carregamento, ocorre verificação para
garantir que o módulo possa ser instanciado.

A diretiva suporta os seguintes parâmetros:

| `fs`   | Permite que o convidado acesse um diretório no host.<br/>O parâmetro pode ser especificado múltiplas vezes para diferentes diretórios.                                                                                                                                                                                                                                                                                         |
|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `api`  | Restringe explicitamente a lista de APIs permitidas para o módulo listando-as.<br/>Se o módulo tentar usar APIs indisponíveis (não listadas aqui),<br/>um erro "API not found" é retornado.<br/><br/>Por padrão, todas as APIs estão disponíveis para o módulo.                                                                                                                                                                |
| `type` | Controla o ciclo de vida do módulo carregado.<br/><br/>- No modo `command`, a máquina executa uma vez<br/>  e seu estado é destruído após a execução.<br/>- No modo `reactor`, a máquina efetivamente roda indefinidamente,<br/>  permitindo que o código seja executado múltiplas vezes.<br/>  Isso requer gerenciamento cuidadoso de memória:<br/>  se os recursos não forem liberados, vazamentos de memória podem ocorrer. |

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

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

### wasm_modules

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `wasm_modules` { ... };   |
|-------------------------------------------------------------------------------------------|---------------------------|
| Padrão                                                                                    | —                         |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | main                      |

Uma diretiva de nível superior que fornece o contexto do arquivo de configuração
no qual as diretivas WASM devem ser especificadas.
Pode conter comandos para carregar módulos WASM e configurar parâmetros
específicos para um runtime particular.
