2

我有一个在本地运行并连接到 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. 我不明白第三个论点应该是什么。

4

0 回答 0