在 WebAssembly的官方定义中, 这是因为,从早期的 VMWare WorkStation、VirtualBox,到今天的 Docker,虚拟化技术一直是云计算的基础。 因此,作为一种具有诸多优势的虚拟机代码格式,WebAssembly 进入后端应用领域是必然趋势。 Docker 创始人 Solomon Hykes 在 2019 年表示: 如果 WASM+WASI 在 2008 年就存在,我们就不需要创建 Docker 可见 WebAssembly 在后端应用中确实具有广阔的应用前景。 当然,Solon Hykes 表示,他的意思并不是稍后 这也是当今业界普遍的看法:
如下图所示,无论是 Web 应用还是非 Web 应用,我们都需要在宿主程序中嵌入WebAssembly Runtime(运行时)才能使用 WebAssembly. 唯一不同的是,在 web 应用中,宿主程序是浏览器,而在非 web 场景中,宿主程序是我们自己的应用,具体到后端应用,宿主程序则是我们的后端服务。 目前可用的 WebAssembly 运行时包括 Wasmtime、WasmEdge、WAVM、Wasmer 等,各有优缺点。 下面以 Wasmtime 为例,介绍如何在 Go 语言开发的宿主程序中嵌入 WebAssembly. 嵌入 WebAssembly 运行时和实例化 WebAssembly 模块非常简单,如果省略错误处理,下面几行代码就可以完成所有这些工作。 func createWasmVM(code []byte) { engine := wasmtime.NewEngine() module, _ := wasmtime.NewModule(engine, code) store := wasmtime.NewStore(engine) linker := wasmtime.NewLinker(engine) inst, _ := linker.Instantiate(store, module) _ = inst} |
|