Meteor:订阅一个发布是否会将所有发布的数据下载到客户端?

Meteor: Does subscribing to a publication download all the published data to the client?

问题听起来很愚蠢,但我找不到我的问题的明确答案。我知道订阅出版物会使数据可供客户使用。

所以我想了解的是数据何时下载到 Minimongo 中。客户是否会在订阅后立即下载发布中的所有数据? 或者(这更有意义),客户端是否只在他开始查询数据时才下载数据。我的术语可能是,为此道歉。但也许一些代码让它更清楚。以下均为客户端代码运行。

正在订阅:

const eventSub = Meteor.subscribe('getEvents');
const loading = !eventSub.ready();

正在查询:

const fin = {_id:someid};
const eventData = loading ? null : Events.find(fin).fetch()[0]

Pub/Sub 在 meteor(以及几乎所有客户端-服务器通信)中使用称为 DDP 的协议完成,通常通过 Web 套接字完成(如果不支持,则有后备)。

当客户端订阅发布时,它会向服务器发送消息以请求订阅。这将调用处理程序(您定义并提供给 Meteor.publish 的发布函数),它可以 return 一个 Mongo 游标和游标数组或处理较低级别的细节自行发布。

如果函数 return 是游标,服务器会观察它并尽快发送有关数据的消息。首先,所有匹配的文档都作为 added 消息发送给客户端,这些消息会自动翻译成 MiniMongo.

中的文档

以后的更改会在服务器注意到它们时由服务器游标观察器发送。

ready 是服务器发送的另一条消息,它告诉客户端服务器已经发送了当时的任何内容。

这意味着数据会立即(或至少尽快)发送到客户端,但不是同步的,也不是在一条消息中。

反应式计算(使用 Tracker)可用于订阅,获取订阅的就绪状态并根据需要查询数据,因为该对象的 ready() 方法是 "reactive".