#bus #wasi

wasmer-bus

WebAssembly模块的调用总线

1 个稳定版本

1.1.0 2022年8月8日

1579WebAssembly

Download history 16/week @ 2024-04-07 14/week @ 2024-04-14 90/week @ 2024-04-21 39/week @ 2024-04-28 15/week @ 2024-05-05 20/week @ 2024-05-12 21/week @ 2024-05-19 27/week @ 2024-05-26 25/week @ 2024-06-02 12/week @ 2024-06-09 19/week @ 2024-06-16 20/week @ 2024-06-23 4/week @ 2024-06-30 12/week @ 2024-07-07 24/week @ 2024-07-14 12/week @ 2024-07-21

52 每月下载
12 个Crate中(直接使用6个) 使用

MIT/Apache

94KB
2.5K SLoC

WASM通用总线

WASM通用总线实现了WebAssembly库和可执行文件用于在WASM模块和/或操作系统函数之间调用和接收调用的标准syscall接口。

目前WASM总线支持以下运行时

此总线支持的功能包括

  • WebSocket连接
  • HTTP和HTTPS调用
  • 启动子进程
  • 线程休眠和超时
  • 异步运行时引擎
  • 客户端调用WASM模块

待办事项

  • 启动线程
  • 多线程运行时引擎
  • 通用日志记录
  • 服务器端调用WASM模块

后端实现

为了在您的运行时实现此总线,您需要链接到在此库中公开的ABI并实现函数。

参考实现请见下文

https://github.com/wasmerio/ate/tree/master/wasmer_term/src/bus

示例API

以下是发出特定API的辅助类和序列化对象的简单示例

use wasmer_bus::macros::*;

#[wasmer_bus(format = "json")]
pub trait Time {
    async fn sleep(&self, duration_ms: u128);
}

相对对象

还可以发出一系列携带特定上下文的子API

use serde::*;
use std::sync::Arc;
use wasmer_bus::macros::*;

#[wasmer_bus(format = "bincode")]
pub trait SocketBuilder {
    async fn connect(
        &self,
        url: String,
        state_change: impl Fn(SocketState),
        receive: impl Fn(Vec<u8>),
    ) -> Arc<dyn WebSocket>;
}

#[wasmer_bus(format = "bincode")]
pub trait WebSocket {
    async fn send(&self, data: Vec<u8>) -> SendResult;
}

测试

您可以通过上传到wapm.io并前往Wasmer Shell来测试您的WASI程序

https://wasmer.sh

依赖项

~4–10MB
~99K SLoC