同步Drive Realtime Document的文件名

时间:2014-07-20 15:26:08

标签: google-drive-api google-drive-realtime-api

我的实时文档允许用户在编辑器中编辑文件名(很像谷歌自己的应用程序)。我将此表示为一个协作字符串,以便所有协作者尽快看到该文件重命名。

我试图确定保持此协作字符串与实际文件名同步的最佳和最有效的方法。有两种情况需要考虑:

在编辑器更改中

如果用户在编辑器中编辑文档名称。在这种情况下,我们需要使用Drive API将更改推送到Google驱动器上的文件。为了避免竞争条件,最好只有一个合作者推动更改。最简单的方法是检查重命名事件是否是本地的。

我还发现最好添加延迟,因此我们不会在每次更改字符时将重命名推送到Drive API。如果几秒钟后没有更多的名称更改通过,它会推动更改。这一切似乎都运作良好。

外部变更

在外部更改文件名的情况下,更难以向我请求建议的人。例如,如果用户在Drive界面中重命名了该文件。我们希望此更改能够更新我们的协作字符串以匹配。

我的应用程序完全是客户端的,因此我无法使用webhook推送通知。所以我唯一的解决方案是每X秒轮询一次文件名(当前设置为10)。但这会带来以下问题:

  • 它是API密集型的。如果您有4个协作者,可以将屏幕打开8小时,即11520 API调用。如果我的应用程序有很多用户包含大量文档,我可以看到这可能会让我超出API限制。
  • 为避免竞争条件(并减少API调用),我们只希望一个协作者检查更改并在文件名更改时更新协作字符串。但是当合作者可以随时加入/退出时如何挑选?目前,如果合作者是"领导者,那么我可以随时检查每个协作者。 "领导者"是会话ID最高的协作者。这似乎工作,但它似乎相当hackey。此外,如果合作者密切合作,我想知道竞争条件是否可能导致多个合作者认为他们是领导者。

有更简单的方法吗?我缺少一个实时API函数?

如果实时API只提供了存储文档名称的方法,那将是理想的。只要实时API检查突变,它就可以获取最新的文档名称。

1 个答案:

答案 0 :(得分:1)

我认为您已经确定了选项。目前还没有任何内置功能可以通过Realtime API专门同步它。

就个人而言,我可能会大量退出投票时间......标题总是最新的可能并不重要,因此每隔几分钟询问可能就足够了,并且会大大降低你的qps。

在识别"领导者"方面,我无法想到比基于会话ID的确定性更好的东西。只要每次重新检查每次会议加入/离开事件,我都不认为应该有任何问题。