Google云端硬盘推送通知 - 针对单个更改事件的多次点击

时间:2014-09-07 01:29:34

标签: 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包含确认信息,一旦我将文件上传到该文件夹​​,我就会收到通知命中('sync'信号也可以收到)。

收到更改通知后,我会回复'200'字符串,因为Google云端硬盘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资源的 maxChangeIdCount 不会增加。

因此Google Drive Pusher似乎没有看到成功的200代码并重试通知。当然,这会带来一个巨大的问题 - 很难确认这一变化确实发生了。

所以,问题是:

  • 对通知的正确回应是什么 - 是字符串“200”还是没有响应正文的HTTP响应代码
  • 如何保证在观看的文件发生变化时,始终只会有一次通知更新。

谢谢!

1 个答案:

答案 0 :(得分:1)

  • 对通知的正确回应是什么 - 它是一个字符串" 200"或没有响应正文的HTTP响应代码

它是一个200 HTTP响应代码:响应可以是一个空主体

  • 如何保证在观看文件更改时始终只有一次通知更新

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

你能做什么:

  • 您可以确保发送200个http响应代码
  • 根据您的代码的结构方式,如果您可以确保只打开1个频道,那么谷歌只向您发送1个通知,即只有在前一个频道已过期时才创建新频道