功能简介
Realtime 通过 WebSocket 订阅 Project 内账号、数据、文件、函数等频道。服务端在投递前应用当前身份、Project 和资源 Permission;更改登录态或订阅集合时,应由应用管理订阅句柄和连接生命周期。
当前支持范围
- 实时订阅(SUPPORTED):通过 WebSocket 按频道订阅账号、数据、文件、函数等事件,并在发送前应用项目权限过滤。
适用场景
- 构建数据列表的即时刷新。
- 观察文件上传、Function Execution 或账号事件。
- 在协作界面按权限分发变化。
前置条件
- Web Platform Origin 已允许。
- 客户端已设置正确 endpoint 与 Project。
- 当前 Session/JWT 对目标资源具有 read 权限。
Console 操作路径
Console 没有独立 Realtime 数据浏览器。使用 SDK 在应用中订阅;Console 可用于检查 Project、Platform、用户 Session 和目标资源 Permission。
SDK 示例
SDK · TypeScript
import { Client } from 'appbase-web-sdk';
const client = new Client()
.setEndpoint('https://<APPBASE_HOST>/v1')
.setProject('<PROJECT_ID>');
import { Realtime, Channel } from 'appbase-web-sdk';
const realtime = new Realtime(client);
const subscription = await realtime.subscribe(
[
Channel.tablesdb('<DATABASE_ID>').table('<TABLE_ID>').row(),
Channel.bucket('<BUCKET_ID>').file()
],
response => {
console.log(response.events);
}
);
await subscription.close();REST 示例
REST · Bash
# Realtime 使用 WebSocket,而不是普通 curl 请求:
wss://<APPBASE_HOST>/v1/realtime?project=<PROJECT_ID>&channels[]=<CHANNEL>常见错误
| 现象 | 处理建议 |
|---|---|
| WebSocket 401/403 | 检查 Session、Project、Origin 和目标资源 read Permission。 |
| 收到事件但列表无变化 | 按 response.events 与 payload 类型过滤,并重新读取权威数据。 |
| 频繁重连 | 复用一个 Realtime client,并通过 subscription.close() 移除订阅。 |
| 连接被限流 | 减少连接与订阅抖动,按实例限流退避。 |
当前限制
- Realtime 不是消息队列,也不保证替代业务数据重读。
- GraphQL Subscription 不支持;请使用 Realtime WebSocket。
- 频道 API 随 SDK 版本变化,应以目标 SDK 导出为准。
Appwrite 兼容说明
Realtime、Channel 与权限过滤概念保持兼容;示例来自 AppBase Web SDK。
AppBase 增强说明
AppBase 的 AI/Memory/Knowledge Base 部分流程也可使用项目级事件,但公开订阅范围应以实际 SDK 和测试为准。
发布状态和验证 Commit
origin/main 已核验。验证 Commit:0363062a1c7ea08741975bb5ba0c3361663c9353。
权威来源文件列表
backend-candidate:app/realtime.phpbackend-candidate:tests/e2e/Services/Realtime/frontend-candidate:packages/sdks/client-web/src/services/realtime.ts
Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/apis/realtime。上游页面不是 AppBase 实现证据。