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 e está disponível como um pacote separado chamado angie-module-wasm.

Exemplo de Configuração#

# 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";
        }
    }
}

Diretivas#

load#

Sintaxe

load arquivo id=identificador [fs=caminho_host:caminho_guest]... [api=api]... [type=command | reactor]

Padrão

Contexto

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 guest acesse um diretório no host. 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. Se o módulo tentar usar APIs indisponíveis (não listadas aqui), um erro "API not found" é retornado.

Por padrão, todas as APIs estão disponíveis para o módulo.

type

Controla o ciclo de vida do módulo carregado.

  • No modo command, a máquina executa uma vez e seu estado é destruído após a execução.

  • No modo reactor, a máquina efetivamente roda indefinidamente, permitindo que o código seja executado múltiplas vezes. Isso requer gerenciamento cuidadoso de memória: se os recursos não forem liberados, vazamentos de memória podem ocorrer.

wasm_modules#

Sintaxe

wasm_modules { ... };

Padrão

Contexto

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.