🔔 什么是订阅?

订阅让客户端实时接收数据变化。当数据库中的数据变化时,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 自动响应变化
← 上一页:Reducer 函数下一页:语言支持 →