Meteor:订阅出版物是否将所有已发布的数据下载到客户端?

时间:2017-07-14 17:02:01

标签: meteor ddp

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

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

订阅:

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

查询:

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

1 个答案:

答案 0 :(得分:1)

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

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

如果函数返回游标,服务器会观察它并尽快发送有关数据的消息。首先,所有匹配的文档都以added消息的形式发送给客户端,这些消息会自动转换为MiniMongo中的文档。

当服务器注意到它们时,服务器游标观察者会发送稍后的更改。

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

这意味着数据会立即(或至少是ASAP)发送到客户端,但不会同步发送到客户端,而不会发送到单个消息中。

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