0

我阅读了有关 Box 事件的文档,对如何正确处理乱序框事件有点迷茫。

根据文档,

事件偶尔会出现乱序。例如,文件上传可能会在文件夹创建事件之前出现。您可能需要缓冲事件并按逻辑顺序应用它们。

比方说,我从盒子服务器返回了两个 ITEM_UPLOAD 事件,它们用于上传 file_1 和 file_2,而用于上传 file_2 的 ITEM_UPLOAD 事件比用于上传 file_1 的事件更早。

但是,在服务器端真正发生的是上传 file_1 比上传 file_2 稍早,而且时间差异非常小,以至于两个事件的“created_at”和“recorded_at”值相同。这两个时间戳的分辨率是二级。

在这一点上,我无法确切地说出哪个先发生,因为没有好的衡量标准可以作为判断的参考。

你能给我一些信息来解决这种情况吗?

非常感谢。

==================================================== =======

ITEM_UPLOAD 事件在这里可能不是一个很好的例子。如果我更关心 ITEM_RENAME 事件怎么办?假设我们的应用可以根据 ITEM_RENAME 事件重命名本地文件。不知何故,我在同一个文件上得到了两个 ITEM_RENAME 事件,它们乱序但具有相同的时间戳。在不缓存所有盒子对象的元数据(如 sequence_id)的情况下,我如何知道我应该在两个事件中使用哪个名称值?

4

1 回答 1

1

我认为您需要提供有关您为什么关心的其他详细信息。在您的示例中,如果上传了 2 个文件并在同一秒到达,您为什么要关心它们在事件流中遇到的顺序?

更具挑战性的问题是文件夹创建和文件上传事件无序到达。如果您尝试使用事件在本地创建文件,并且该文件所在的 folder_id 尚未在事件流中找到您,那么您真的不知道将这个新文件放在哪里。

当您有多个内核处理问题的不同部分时,微处理器设计中可能会发生类似的问题。您基本上必须能够将这项工作搁置到以后,并在您收集到足够的信息时对其进行处理。

通常有效的方法是在获得物品时对其进行处理,如果您没有足够的信息来处理物品,请将其放在一边并在下次空闲时检查它。正如您所注意到的,等待一两秒钟通常就足够长了,尽管项目可能会失去顺序多达几秒钟。

于 2013-11-14T15:45:29.173 回答