Sign inGet started

缓存频道

缓存频道会记住最新事件,并向每个新订阅者重放该事件。更新发生后才连接的客户端无需等待下一次发布即可渲染当前状态。
缓存频道适用于比分、设备状态、构建进度或订单状态等实时值。订阅会提供初始状态及后续更新。

命名缓存频道

频道名称决定是否启用缓存。将 cache- 放在名称开头,或紧跟在频道类型前缀之后。
名称已缓存订阅方式
cache-orders持有 app key 的任何人
private-cache-orders后端为客户端签名
presence-cache-lobby后端签名,跟踪成员
orders-cache持有 app key 的任何人
orders-cache 不是缓存频道。cache- 前缀必须位于名称中 private-presence- 前缀之后。
频道的其他行为保持不变。private-cache- 频道的授权方式与私有频道完全相同,presence-cache- 频道仍然像其他在线状态频道一样跟踪成员并触发成员事件。

订阅

const bird = new BirdRealtime({ appKey: "your-app-key", region: "us1" });

const match = bird.subscribe("cache-match-42");

match.bind("score-updated", (data) => {
  render(data);
});

match.bind("bird:cache_miss", () => {
  console.log("nothing cached for this channel yet");
});
命中时,缓存的事件在订阅成功后送达。它携带原始事件名称和载荷,因此同一个处理器可以处理缓存事件和实时事件。
未命中时,客户端在该频道上收到 bird:cache_miss。原因是该频道从未收到过发布,或其缓存事件已过期。

未命中时填充缓存

如果某个端点订阅了 realtime.cache_channels,未命中事件也会到达你的服务器。在 webhook 处理程序中读取当前状态,然后将其发布到该频道。
await bird.realtime.publish(appId, {
  event: "score-updated",
  channels: ["cache-match-42"],
  data: await currentScore(42),
});
触发未命中的客户端在你的服务器发布替代事件之前已完成订阅,因此会收到新状态。该流程也会为首个订阅者填充空缓存。

缓存内容与保留时间

通过 API 发布的事件会被缓存,包括单次发布和批量发布。名称以 client- 开头的客户端事件不会被缓存。
缓存事件最多可保留 30 分钟,但可能更早过期。对于更新不频繁的频道,应通过缓存未命中 webhook 重新填充,而不是假设缓存仍然有效。
每个频道只记住最近一次事件。如果你先发布 score-updated,再发布 match-ended,新订阅者只会收到 match-ended。每个缓存频道只使用一个事件名称,或者在每次载荷中包含完整状态。

缓存限制

缓存频道只存储最近一次事件,不保留事件历史。客户端离线期间错过两次更新后,只会收到最新状态,而没有中间事件。请将持久状态保存在数据库中。重新连接后,客户端会重新订阅,并在缓存事件仍然可用时渲染该事件。参见发布事件了解投递保证。

后续步骤