我有一个在本地运行并连接到 wasm 模块的 Golang TCP 服务器。目前,我可以从 wasm 函数返回一个值。通过这个博客,我注意到应该有可能返回多个值而不是一个。但是,在我的 Go TCP 服务器中,我没有从 wasm 函数中得到任何响应。
这就是我返回一个值的方式,它工作正常:
// Rust code for wasm modules
#[no_mangle]
pub extern "C" fn echo(ptr: *mut u8, length: usize) -> *mut u8 {
...
let newptr = get_ptr();
newptr
}
在 Go 服务器中:
// Go code to connect to wasm modules and get access to the returned value
engine := wasmtime.NewEngine()
store := wasmtime.NewStore(engine)
linker := wasmtime.NewLinker(store)
...
newPtr, err := server.funcs["echo"].Call(server.ptr, int32(len(recivedBytes)))
check(err)
ptr := newPtr.(int32)
以下是我如何尝试从 wasm 函数返回多个值:
// Rust code for wasm modules
#[no_mangle]
pub extern "C" fn echo(ptr: *mut u8, length: usize) -> (*mut u8, i32) {
...
let newptr = get_ptr();
let newlength = get_length();
(newptr, newlength)
}
在 Go 服务器中,我添加了以下代码行:
wasmtime.NewConfig().SetWasmMultiValue(true)
其余的和以前一样:
/* Go code to connect to wasm modules and get access to the returned value */
engine := wasmtime.NewEngine()
store := wasmtime.NewStore(engine)
linker := wasmtime.NewLinker(store)
...
result, err := server.funcs["echo"].Call(server.ptr, int32(len(recivedBytes)))
check(err)
res := result.([]wasmtime.Val)
我使用命令编译了 wasm 模块cargo wasi build
,它编译得很好。但是,当向与 wasm 模块对话的 Go 服务器发送请求时,我收到一个错误,提示got 2 expected 3 arguments
. 我不明白第三个论点应该是什么。