Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google drive api 正在同步驱动器实时文档的文件名_Google Drive Api_Google Drive Realtime Api - Fatal编程技术网

Google drive api 正在同步驱动器实时文档的文件名

Google drive api 正在同步驱动器实时文档的文件名,google-drive-api,google-drive-realtime-api,Google Drive Api,Google Drive Realtime Api,我的实时文档允许用户在编辑器中编辑文件名(很像谷歌自己的应用程序)。我将其表示为协作字符串,以便所有协作者尽快看到文件重命名 我正在努力确定一种最佳、最有效的方法,使这个协作字符串与实际文件名保持同步。有两种情况需要考虑: 编辑器中的更改 如果用户在编辑器中编辑文档名称。在这种情况下,我们需要使用驱动器API将更改推送到GoogleDrive上的文件中。为了避免竞争条件,最好只有一个合作者将更改推出。最简单的方法似乎是检查重命名事件是否是本地的 我还发现最好添加一个延迟,这样我们就不会在每次字符

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

我正在努力确定一种最佳、最有效的方法,使这个协作字符串与实际文件名保持同步。有两种情况需要考虑:

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

我还发现最好添加一个延迟,这样我们就不会在每次字符更改时都将重命名推到驱动器API上。如果几秒钟过去了,在这一点上没有更多的名称更改,它会将更改推出。这一切似乎都很有效

外部变化 更难的是,当文件名被外部更改时,我希望得到建议。例如,如果用户重命名了驱动器接口本身内的文件。我们希望此更改更新我们的协作字符串以匹配

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

  • 它是API密集型的。如果您有4个协作者将屏幕打开8小时,那么这就是11520个API调用。如果我的应用程序有很多用户,有很多文档,我可以看到这可能会使我超越API限制
  • 为了避免竞争条件(并减少API调用),我们只希望一个协作者检查更改,并在文件名更改时更新协作字符串。但如何选择协作者何时可以随时加入/退出?目前,我让每个合作者随时检查合作者是否是“领导者”。“领导者”是会话id最高的协作者。这似乎是可行的,但这一切似乎相当骇人听闻。此外,如果合作者紧密地结合在一起,我想知道是否有可能种族条件会导致多个合作者认为他们是领导者
有没有更简单的方法?我缺少的实时API函数


如果实时API只提供一个存储文档名的方法,这将是理想的。任何时候实时API检查突变,它都可以获取最新的文档名。

我想您已经确定了选项。目前没有任何内置功能专门通过实时API进行同步

就我个人而言,我可能会放弃很多投票时间。。标题始终是最新的可能并不重要,因此每隔几分钟询问一次可能就足够了,这将大大降低您的qps


在识别“领导者”方面,我想不出比基于会话id的确定性更好的方法了。只要每个会话加入/离开事件都重新检查,我认为不应该有任何问题。

感谢您的反馈。我每5分钟退一次。在这一点和只有一个合作者在检查这一事实之间,应该减少API调用。