Meteor DDP - “准备好”和“更新”消息澄清

时间:2013-06-11 18:53:50

标签: meteor ddp

我目前正在根据此页面上提供的规范实施DDP客户端: https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md

我对2种方法类型有疑问,称为“就绪”和“更新”。

根据规范,让我们从“准备好”开始:

  

当一个或多个订阅已完成发送其初始时   批量数据,服务器将发送带有ID的就绪消息。

这是否意味着我们可以从服务器获得几条“添加”消息,直到整个集合完全转移到客户端。我们应该将它存放在一个临时的地方,然后在公开之前等待“准备好”的信号量?即在真正的收藏中?

关于远程过程调用的相同问题。我应该将结果存储在临时集合中,只有在收到“更新”消息后才返回(处理)结果吗?

这部分模糊不清

  

一旦服务器根据此过程调用完成向客户端发送所有相关数据消息,服务器应发送一个   使用此方法的ID将更新的消息更新到客户端。

“应该”,所以如果我确实依赖它,我就会陷入困境吗?

1 个答案:

答案 0 :(得分:4)

  

我们应该把它存放在一个临时的地方然后等待“准备好”   信号量在公开之前?即在真正的收藏中?

标准Meteor JavaScript客户端在客户端集合中提供添加的文档,因为它们来自服务器。因此,例如,如果该集合正在网页上显示,并且到目前为止已有100个文档中的5个到达,则用户将能够看到5个文档。

当订阅“就绪”消息到达时,客户端上的订阅被标记为“就绪”,如果客户正在做一些需要等待所有数据到达的事情,则客户可以使用该订阅。

您是否希望在客户端等待所有数据到达之前公布取决于您...这取决于您对客户的操作以及是否要在文档到达时显示或不

  

“应该”,所以如果我确实依赖它,我就会陷入困境吗?

Meteor服务器 发送“已更新”消息,因此您可以依赖它。

  

关于远程过程调用的相同问题。我应该将结果存储在临时集合中,只有在收到“更新”消息后才返回(处理)结果吗?

进行方法调用有两个结果:方法返回的返回值(或错误)(“结果”消息),以及方法调用可能已插入/更新/删除的文档(“更新了“消息”。您想听哪一个取决于您:您是否知道何时收到来自方法调用的所有文档更改或者您只是想要方法返回值是否很重要。

Meteor客户端使用“已更新”消息执行“延迟补偿”:当客户端更改本地文档时,更改将立即应用于本地文档(并且更改将对用户可见)。 ..假设服务器可能接受更改。然后客户端进行请求更改的方法调用,并等待从服务器发送更新的文档(如果它们被接受,则可以包括更改,如果它们被拒绝,则可以包括更改)。收到“更新”消息后,本地更改将被丢弃并替换为来自服务器的实际更新。如果您没有在自己的客户端进行延迟补偿,那么您可能不关心“更新”消息。