Google Cloud Messaging 服务器响应缓慢(1分钟)

5

我有一个Web服务器,通过PHP向我的开发的Android应用程序中的用户发送GCM通知。大约有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在第三方应用程序服务器的角色上进行了解释。Google可能会检测到您的服务器流量过大并设置限制。 - AlexBcn
3个回答

3

尝试运行:

curl https://apis.google.com/

同时并且
curl https://apis.google.com/ --ipv4

如果第二个运行更快,只需在服务器上禁用IPv6即可。也许你的服务器提供商尚不支持IPv6,这会导致它在超时并再次切换到IPv4之前延迟1-2分钟。
我最近遇到的另一个问题是限制推送GCM: how to avoid throttling
基本上,如果您在短时间内向同一用户发送太多消息,谷歌将限制您的推送消息。这是为了“节省电池寿命”和“带宽”(可能是他们自己的)。请记住,如果您想在用户实际使用应用程序时每分钟向设备发送数据超过10次,最好始终在用户与您的服务器之间打开直接TCP连接 :)

1
谢谢!我刚刚更换了服务器,花了我几天时间才意识到IPv6是导致这个问题的原因。你太棒了先生 :) - Zach Rattner
太棒了,谢谢!这个IPv4建议解决了一个我无法在其他任何地方找到答案的问题。 - Arthur
我遇到了同样的问题!IPv6引起了这个问题。谢谢,它救了我的一天。 - Vikram Thakur

0

问题不在于接收消息的延迟,而在于访问android.googleapis.com的延迟。 - JarnoQ

0

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接