🔔 什么是订阅?
订阅让客户端实时接收数据变化。当数据库中的数据变化时,SpaceTimeDB 自动推送更新到订阅的客户端。
- 无轮询 - 不需要定期请求数据
- 增量更新 - 只推送变化的部分
- 本地缓存 - SDK 维护镜像状态
📱 客户端订阅
React/TypeScript
import { useTable } from '@spacetimedb/react';
function ChatApp() {
// 自动订阅,数据变化时自动更新
const [messages] = useTable(tables.message);
return (
<ul>
{messages.map(msg =>
<li key={msg.id}>{msg.text}</li>
)}
</ul>
);
}Rust 客户端
// 订阅表
let mut sub = ctx.db.messages().subscribe();
// 处理更新
while let Some(event) = sub.next().await {
match event {
TableUpdate::Insert(row) => println!("New: {:?}", row),
TableUpdate::Delete(row) => println!("Deleted: {:?}", row),
}
}📝 SQL 订阅
使用 SQL 查询定义订阅范围:
// 订阅特定查询
spacetime subscribe "SELECT * FROM messages WHERE room_id = 123"
// 订阅视图
spacetime subscribe "SELECT * FROM my_player"🎯 订阅规则
- Public 表 - 所有客户端可订阅
- Private 表 - 需要特定权限
- Views - 可定义自定义订阅逻辑
⚡ 工作原理
1. 客户端发送订阅请求 2. SpaceTimeDB 评估订阅表达式 3. 返回当前数据快照 4. 数据变化时,推送增量更新 5. 客户端 SDK 更新本地缓存 6. UI 自动响应变化