浏览全部文档 · 21/37

功能简介

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>

权限模型

订阅建连使用当前客户端身份;事件必须通过频道和资源权限过滤。API Key/Server SDK 不作为默认 Realtime 终端身份,敏感数据也不应放到公开频道。

常见错误

现象处理建议
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.php
  • backend-candidate:tests/e2e/Services/Realtime/
  • frontend-candidate:packages/sdks/client-web/src/services/realtime.ts

Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/apis/realtime。上游页面不是 AppBase 实现证据。

继续阅读