proxy-wasm-go-host

module
v0.0.0-...-52204ac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2023 License: AGPL-3.0

README

WebAssembly for Proxies (GoLang host implementation)

The GoLang implementation for proxy-wasm, enabling developer to run proxy-wasm extensions in Go.

Run Example

  • build and run host
cd example

## 编译gohttp.wasm
tinygo build -scheduler=none -no-debug -target=wasi -o gohttp.wasm ./gohttp.go

go run .
  • send http request
curl http://127.0.0.1:2045/
  • host log
receive request /
print header from server host, User-Agent -> [curl/7.64.1]
print header from server host, Accept -> [*/*]
[http_wasm_example.cc:33]::onRequestHeaders() print from wasm, onRequestHeaders, context id: 2
[http_wasm_example.cc:38]::onRequestHeaders() print from wasm, Accept -> */*
[http_wasm_example.cc:38]::onRequestHeaders() print from wasm, User-Agent -> curl/7.64.1

references

参考资料

个人理解

宿主程序通过import向wasm导入函数实现,exprot导出wasm的函数,wasm通过proxywasm包对象获取宿主函数对象的操作权限, 处理完成的数据也可以调用函数回传, proxy-wasm作为协议是规定了具体的方法,根据实际情况,对应增加import 和 export

在 Proxy-Wasm 中,Wasm VM(虚拟机)、Wasm 模块(Module)和 Wasm 实例(Instance)之间的关系是一对多的关系.

一个 Wasm VM 可以加载和运行多个 Wasm 模块.Wasm VM 是整个系统的核心,负责创建和管理 Wasm 模块的实例.
每个 Wasm 模块代表一个独立的 WebAssembly 模块文件,它包含了一组函数、内存、表格等定义.同一个 Wasm VM 可以加载并运行多个不同的 Wasm 模块.
每个 Wasm 模块实例化为一个 Wasm 实例,它是 Wasm VM 运行时的具体实例.每个 Wasm 实例都有自己的内存空间和运行时状态,它们在 Wasm VM 中相互隔离并独立运行.
因此,一个 Wasm VM 可以同时管理多个 Wasm 模块的实例,每个 Wasm 模块实例都是独立的,它们之间不会相互影响或共享状态.这种一对多的关系使得 Proxy-Wasm 可以同时加载和运行多个不同的 Wasm 模块,并在运行时进行管理和交互.

-------------------------+ | | | Wasm VM (Wasm Runtime) | | | ----------+--------------+ | ----------v--------------+ | | | Wasm Module (Wasm Image)| | | ----------+--------------+ | ----------v--------------+ | | |Wasm Instance (Wasm Container) | | | -------------------------+

Directories

Path Synopsis
internal
e2e
mosn
log
pkg/mock
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.
proxywasm
v1
v2

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL