Google Cloud Messaging Server 响应缓慢(1 分钟)

Posted

技术标签:

【中文标题】Google Cloud Messaging Server 响应缓慢(1 分钟)【英文标题】:Google Cloud Messaging Server response slow (1 minute) 【发布时间】:2014-06-26 19:49:19 【问题描述】:

我有一个网络服务器,它通过带有 GCM 的 php 通知向我开发的 android 应用程序发送给用户。大约有 3000 名用户,有些用户每天会收到大约 20 条通知。

它完美运行了 1 年多,但从 5 天开始,我发现对“https://android.googleapis.com/gcm/send”的调用响应时间为 1 分钟,而不是之前的不到 1 秒。仍然所有通知都会到达用户那里。

如下开发:http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

我禁用发送通知超过 1 天。然后再次启动它,几分钟后 googleapis 像往常一样响应,但响应时间又是 60 秒。

看起来 Google 是故意这样做的,但我不知道为什么?

【问题讨论】:

如果发送失败,您是否使用指数退避?例如,在 java 中,有一个类似 send (Message message, String registrationId, int retries) 的方法,注意:此方法使用指数退避来重试以防服务不可用,因此可以阻塞调用线程数秒。 Google 在Role of the 3rd-party Application Server 上对此进行了解释。 Google 可能会检测到来自您的服务器的流量过多并设置了限制。 【参考方案1】:

尝试运行:

curl https://apis.google.com/

curl https://apis.google.com/ --ipv4

如果第二个跑得更快,只需在您的服务器上禁用 ipv6,可能您的服务器的 ISP 还不支持 IPv6,这会导致 1-2 分钟延迟,然后超时并再次切换到 IPv4。

我最近遇到的另一个问题是限制GCM: how to avoid throttling

如果您在短时间内向同一用户发送过多消息,基本上谷歌会限制您的推送消息。这是为了“节省电池”和“带宽”(可能是他们的)......请记住,如果您想每分钟向设备发送数据超过 10 次,并且当用户实际使用该应用程序时,最好在当时的用户和您的服务器之间打开一个直接的 TCP 连接:)

【讨论】:

谢谢!我刚刚移动了服务器,花了几天时间才意识到是 IPv6 导致了这个问题。你摇滚先生:) 太棒了;谢谢!!这个 ipv4 建议刚刚解决了一个我无法弄清楚的问题,并且在其他任何地方都找不到。 我遇到了同样的问题! IPv6 导致了该问题。谢谢它拯救了我的一天【参考方案2】:

http://developer.android.com/google/gcm/adv.html#throttling

有一个节流功能来管理过多的流量...

来源:Receive Android GCM messages so slow?

【讨论】:

问题不是接收消息延迟,而是访问android.googleapis.com延迟。【参考方案3】:

您是如何实现将代码发送给所有 3000 个用户的,Google 允许每个请求 1000 个用户。显示一些代码以便我帮助您。

【讨论】:

我没有。消息不会发送给所有用户。用户可以使用自己的过滤器进行定义。它用于寻呼机服务。

以上是关于Google Cloud Messaging Server 响应缓慢(1 分钟)的主要内容,如果未能解决你的问题,请参考以下文章

GCM(Google Cloud Messaging)推送完全解析

Google Cloud Messaging Bridging Header 导入失败

GCM(Google Cloud Messaging)是不是需要 Google 帐户?

Google-Cloud-Messaging服务的可靠性

Google Cloud Messaging:iOS App 在后台时不会收到警报

在新的 Google Cloud Messaging 上取消注册