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".
问题听起来很愚蠢,但我找不到我的问题的明确答案。我知道订阅出版物会使数据可供客户使用。
所以我想了解的是数据何时下载到 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".