SuperAPI AI 工具集

spacetimedb-rust

编程与开发

查看项目

更新于 10-16 04:58

技能介绍

用途:指导用 Rust 编写 SpacetimeDB 服务端模块(WebAssembly 应用),模块内定义表存储数据、定义 reducer 修改数据,客户端直连数据库执行逻辑。资料称已在 SpacetimeDB 2.0+ API 上测试。

主要能力与用法:表用 #[table(accessor = 名称, public)] 定义,列可加 #[primary_key]、#[unique]、#[auto_inc]、#[index(btree)];访问形如 ctx.db.player(),按主键/唯一键 find,按索引 filter,亦可 iter、count。reducer 用 #[reducer],首参为 &ReducerContext,返回 ()、Result<(), String> 等,失败会回滚事务。上下文提供 ctx.db、ctx.sender()、ctx.timestamp、ctx.identity()、ctx.rng() 等。支持 init、client_connected、client_disconnected 生命周期 reducer,schedule 表触发定时 reducer,多列 btree 索引支持前缀匹配,自定义类型需 #[derive(SpacetimeType)]。2.0 用事件表 + on_insert 取代 reducer 回调,更新仅限主键,非主键改动用删除加插入。

常用命令:spacetime build;spacetime publish my_database --module-path .;spacetime logs my_database;spacetime call my_database create_player "Alice";spacetime sql my_database "SELECT * FROM player";spacetime generate --lang rust --out-dir <client>/src/module_bindings --module-path <backend-dir>。

限制:reducer 必须确定性,禁止文件系统、网络、计时器与外部随机数,随机用 ctx.rng();不得在 #[table] 结构体上派生 SpacetimeType;须导入 Table trait;用 &ReducerContext 而非可变引用;表访问带括号,sender 是方法;静态全局变量行为未定义;预期错误用 Result 而非 panic。Procedures 为 Beta,需 unstable feature,可做 HTTP 且通过 ctx.with_tx 访问表。其他价格与平台信息暂未提供。