跳到主要内容

数据订阅与实时更新

最后更新:2026 年 7 月 16 日

任何数据查询都可以被订阅。订阅会按查询所定义的形状,把服务端数据复制到客户端。第一次送达的是完整的数据对象;此后只要服务端数据发生变化,Delta 就会立即送达所有已订阅的客户端。

信息

用订阅来保持本地那份服务端数据副本的时效性 —— 通过响应式的 Delta,并由 JSONPatch 优化同步流量。


创建订阅​

订阅建立在查询对象之上。

var player = PlayServ.Model<Player>().Key(playerId);
var subscription = player.Listen();

送达模型​

第一条消息按查询的形状送来完整对象。

服务端数据变化时,Delta 会毫不延迟地送达所有 listener,改动会自动应用到本地数据对象上。如果你需要掌控这个过程,就订阅 Update 这个 Event。

Listen()订阅首次初始 payload完整对象数据变化时DeltaJSONPatch应用本地副本已更新触发 Update Event此后每次变化都重复

显式观察更新​

在订阅上使用 Wait<Update>,即可在数据变化时自行处理更新。

subscription.Wait<Update>(e => {
// Called whenever the data is updated
// e.New — the new version of the data
// e.Old — the previous version of the data
});

传输优化:JSONPatch​

为了优化同步过程中的流量,PlayServ 使用 JSONPatch。JSONPatch 描述的是应当施加到数据对象上的改动。即便数据库以 key=value 的形式存储数据,这个办法依然有效。


取消订阅​

要取消订阅,调用 Stop()。

subscription.Stop();

Session 失步后的订阅恢复​

Session 失步之后 —— 也就是 Session 进入 Offline 或 Recovering 再回到 Active —— 失步那一刻处于活跃状态的所有订阅都必须被恢复。这一步由 SDK 自动完成。


下一步​