WASM 进程
WASM 进程
Section titled “WASM 进程”WASM 模块可以通过 process.wasm 条目类型作为进程运行。进程在 Wippy 进程宿主中执行,支持完整的进程生命周期:生成、监控和受管关闭。
entries: - name: wasm_binaries kind: fs.directory directory: ./wasm
- name: compute_worker kind: process.wasm fs: myns:wasm_binaries path: /worker.wasm hash: sha256:292b796376f8b4cc360acf2ea6b82d1084871c3607a079f30b446da8e5c984a4 method: compute| 字段 | 必填 | 描述 |
|---|---|---|
fs | 是 | 包含二进制文件的文件系统条目 ID |
path | 是 | 文件系统中 .wasm 文件的路径 |
hash | 是 | 用于完整性验证的 SHA-256 哈希 |
method | 是 | 要执行的导出函数名 |
transport | 否 | 调用传输:payload(默认)或 wasi-http |
wit | 否 | 用于 raw/core 模块的 WIT 签名 |
imports | 否 | 要启用的宿主导入 |
wasi | 否 | WASI 配置(args、env、mounts) |
limits | 否 | 执行限制 |
CLI 命令
Section titled “CLI 命令”使用 meta.command 将 WASM 进程注册为命名命令:
- name: greet kind: process.wasm meta: command: name: greet short: Greet someone via WASM fs: myns:wasm_binaries path: /component.wasm hash: sha256:... method: greet运行命令:
wippy run greet列出可用命令:
wippy run list| 字段 | 必填 | 描述 |
|---|---|---|
name | 是 | 与 wippy run <name> 配合使用的命令名 |
short | 否 | 在 wippy run list 中显示的简短描述 |
CLI 命令需要 terminal.host 和 process.host 才能工作。
进程生命周期
Section titled “进程生命周期”WASM 进程遵循 Init/Step/Close 生命周期模型:
- Init - 模块被实例化,捕获输入参数
- Step - 执行推进。对于异步模块,调度器驱动 yield/resume 循环。对于同步模块,执行在单步内完成。
- Close - 释放实例资源
从 Lua 生成进程
Section titled “从 Lua 生成进程”生成 WASM 进程并监控其完成:
local process = require("process")local time = require("time")
-- Spawn with monitoringlocal pid, err = process.spawn_monitored( "myns:compute_worker", -- entry ID "myns:processes", -- process group 6, 7 -- arguments passed to the WASM function)
if err then error("spawn failed: " .. tostring(err))end
-- Wait for the process to completelocal events = process.events()local event = events:receive()if event and event.kind == process.event.EXIT then local result = event.result.value -- return value from the WASM functionend导入 WASI 接口的 WASM 进程可以执行异步操作。调度器在 I/O 期间挂起进程,并在操作完成时恢复:
- name: http_worker kind: process.wasm fs: myns:wasm_binaries path: /http_worker.wasm hash: sha256:... method: run imports: - wasi:io - wasi:cli - wasi:http wasi: env: - id: myns:api_url name: API_URL required: trueyield/resume 机制对 WASM 代码透明。客户端中的标准阻塞调用(sleep、read、write、HTTP 请求)自动让出给调度器。
WASI 配置
Section titled “WASI 配置”进程支持与函数相同的 WASI 配置:
- name: file_processor kind: process.wasm fs: myns:wasm_binaries path: /processor.wasm hash: sha256:... method: process imports: - wasi:cli - wasi:io - wasi:clocks - wasi:filesystem wasi: args: ["--input", "/data/input.csv"] cwd: "/app" env: - id: myns:output_format name: OUTPUT_FORMAT mounts: - fs: myns:input_data guest: /data read_only: true - fs: myns:output_dir guest: /output