google-drive-api - Google Drive 推送通知 - 单个更改事件的多次点击

标签 google-drive-api

我正在尝试设置 Google 云端硬盘推送通知来监控文件夹的更改。

代码:

    $channel = new \Google_Service_Drive_Channel;
    $channel->setId('ZZZ');
    $channel->setResourceId('a1b2c3');
    $channel->setType('web_hook');
    $channel->setToken('superToken');
    $channel->setAddress('https://mydomain/notification');
    $folderId = '0BzNPrO3YVvJKU1J6NklYcThFMjQ';
    $res = $service->files->watch($folderId, $channel);

$res 包含确认信息,一旦我将文件上传到该文件夹​​,我就会收到通知(“同步”信号也收到良好)。

收到更改通知后,我会回显“200”字符串,正如 Google Drive API 引用中所建议的那样:

To indicate success, you can return any of the following status codes: 200, 201, 202, 204, or 102.
If your service returns 500, 502, 503, or 504, the Drive API will retry with exponential backoff.

问题是我收到了针对单个更改事件的多个通知,并且它们似乎每次都会在较长时间后到达(与“指数退避”行为匹配)。同时,Changes 资源的ma​​xChangeIdCount 不会增加。

看来 Google Drive 推送程序没有看到成功的 200 代码并重试通知。当然,这提出了一个巨大的问题 - 很难验证更改是否确实发生。

所以,问题是:

  • 对通知的正确响应是什么 - 是字符串“200”还是没有响应正文的 HTTP 响应代码 200
  • 如何保证当监视的文件发生更改时始终只有一个通知更新。

谢谢!

最佳答案

  • 对通知的正确响应是什么 - 是字符串“200”还是没有响应正文的 HTTP 响应代码 200

它是一个 200 HTTP 响应代码:响应可以是空的正文

  • 如何保证在监视的文件发生更改时始终只有一个通知更新

您收到重复通知的可能原因有两个:您没有发送 200 响应代码(并且没有返回字符串 200 作为正文),因此 Google 猜测您没有收到通知,并继续向您发送相同的通知。或者您可能同时打开了 1 个以上的 channel 。如果该代码在一小时内执行多次(或更多,具体取决于 Google 设置的默认过期时间),则您将创建多个 channel ,并且 Google 会将通知推送到所有开放 channel 。

你可以做什么:

  • 您可以确保发送 200 http 响应代码
  • 根据您的代码结构,如果您可以确保仅打开 1 个 channel ,那么 Google 只会向您发送 1 条通知,也就是说,仅在前一个 channel 已过期的情况下才创建一个新 channel

关于google-drive-api - Google Drive 推送通知 - 单个更改事件的多次点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706299/

相关文章:

javascript - 如何显示来自 Google Drive API 的缩略图

google-api - Google Drive Api - 获取文件夹路径

google-drive-api - 如何使用 PHP API 更新 Google 电子表格单元格

c# - 使用 .net sdk 检索 google 驱动器的文件列表

google-api - 我可以将我的谷歌帐户配置为始终接受来 self 的应用程序的请求吗?

java - 如何在 Android 上设置 Google Drive API?

google-drive-api - 根据文件的 ID 查找文件的路径

node.js - 从 Zapier 创建文件

machine-learning - 将单个大型 Google Drive 存档导入到共享的 Google Colab 项目中

gmail - 如何在独立程序中自动从用户检索 OAuth 代码