#wasm-module #stateroom #websocket

stateroom-wasm

构建 Stateroom 服务作为 WebAssembly 模块的宏

11 个版本

0.4.4 2024 年 8 月 4 日
0.4.0 2024 年 5 月 5 日
0.2.9 2023 年 4 月 29 日
0.2.8 2023 年 2 月 20 日
0.2.0 2022 年 1 月 20 日

#161WebAssembly

Download history 75/week @ 2024-04-29 39/week @ 2024-05-06 7/week @ 2024-05-20 50/week @ 2024-07-01 127/week @ 2024-07-29 44/week @ 2024-08-05

每月 171 次下载

MIT/Apache

24KB
268

stateroom-wasm

stateroom-wasmstateroom 的配套包,可以帮助您将服务打包并导出为 WebAssembly 模块。

#[stateroom_wasm]

为了使 Stateroom 服务器能够理解它们,WebAssembly 模块必须导入和导出某些命名的函数。 stateroom_wasm 提供了 #[stateroom_wasm] 模块,该模块应应用于实现 SimpleStateroomService 的项(结构体、枚举或类型别名)。

一个兼容 Stateroom 的 WebAssembly 模块必须恰好包含一个服务。如果您需要为您的应用程序生成多个服务,目前最好的方法是为每个服务创建一个包。

可以使用类型别名生成属于另一个模块的服务绑定

use stateroom_wasm::stateroom_wasm;
use some_module::SomeService;

#[stateroom_wasm]
type Service = SomeService;

执行模型

在初始化时,生成的模型通过调用其 new(room_id, context) 构造函数来创建您的 SimpleStateroomService 实例。在构造函数和后续函数调用中传递的上下文对象是一个全局静态对象,它绑定到从宿主环境导入的函数(如 send_message)。

编译

如果您使用 Stateroom 命令行界面,stateroom dev 将使用 wasm32-wasi 目标构建当前包,然后加载和提供生成的 WebAssembly 模块。

如果您想手动构建,请确保已安装 wasm32-wasi 目标,并将其作为目标传递给 cargo build

$ rustup target add wasm32-wasi
$ cargo build --release --target=wasm32-wasi

嵌入

此包有一个对应的包,stateroom-wasm-host,它可以接受使用此包生成的模块,并通过 StateroomService 接口公开它。

依赖关系

~0.6–1.2MB
~28K SLoC