Meteor DDP - “就绪”和“更新”消息说明

Fla*_*ken 2 meteor ddp

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

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

根据规范,让我们从“就绪”开始:

当一个或多个订阅完成发送他们的第一批数据时,服务器将发送带有他们的 ID 的就绪消息。

这样做意味着我们可以从服务器有几个“添加”的消息,直到整个集合完全传输到客户端。我们应该将它存储在一个临时位置,然后在公开之前等待“就绪”信号量?即在真正的收藏中?

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

这部分晦涩难懂

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

“应该”,所以如果我确实依赖它但什么都没有,我会被卡住吗?

And*_*cox 6

我们应该将它存储在一个临时位置,然后在公开之前等待“就绪”信号量?即在真正的收藏中?

标准的 Meteor JavaScript 客户端使添加的文档在来自服务器的客户端集合中可用。因此,例如,如果该集合正在显示在网页上并且 100 个文档中的 5 个已经到达,那么用户将能够看到这 5 个文档。

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

是否要在客户中等待所有数据到达后再将其公开取决于您……这取决于您对客户的处理方式以及您是否希望在文件到达时显示文件。

“应该”,所以如果我确实依赖它但什么都没有,我会被卡住吗?

Meteor 服务器确实发送了“更新”消息,因此您可以信赖它。

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

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

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