GCM味精输送时间非常不稳定



我已经设置了具有GCM支持的Android应用程序,并拥有一个小测试应用程序将MSG发送到该应用程序。当我在模拟器中运行该应用程序时,我可以(通过记录MSG)可以注册GCM并获得令牌。

然后,当我将令牌放在测试应用中并发送味精时,结果表明发送了1个msg,0失败,0已更改ID。

有时味精几乎立即出现,有时需要20分钟。星期五,我的2个测试MSG花了15分钟和20分钟。我今天早上寄出的前2个是立即寄出的,下一个尚未出现 - 只有10分钟...

我有什么可以做的事情来使交货时间始终如一?随机的20分钟延迟将是一个不可接受的条件。

我们遇到了相同的问题,但它因网络到网络而异。我们认为这是家庭中心路由器(一个处女超级枢纽)在五分钟的不活动之后掉落了连接。您可以通过每两分钟发送一个空的GCM消息来确认以保持连接。

这是对我们所做的事情的更深入的解释:https://groups.google.com/d/msg/android-gcm/y33c9ib54jy/yxnckaprhrqj

您不能保证快速交付,因为GCM到设备连接可能很差,因为Consonsware指出。但是,交付列车中有两个可能的延迟:1)连接到手机的GCM(如前所述)和2)消息实际上从GCM服务器发送的消息延迟。如果将" time_to_live"参数设置为发送应用程序中的0秒,则至少可以测试延迟发生的位置。

值为0秒的值意味着该消息将立即发送,如果交货不成功,该消息将在GCM服务器上丢弃。它不是现实生活中的实际价值确实是由在Google Cloud Messaging中不现实的心跳间隔引起的。

这可能是GCM中最令人沮丧的错误。GCM通过维护从Android设备到Google服务器的空闲套接字连接来工作。这很棒,因为它几乎不会消耗电池电量(与投票相反),并且在消息到达时可以立即唤醒设备。为了确保连接保持活动状态,Android将每28分钟在移动连接上发送一次心跳,每15分钟在WiFi上发送一次心跳。如果心跳失败,连接已终止,GCM将重新建立它,并尝试检索任何未决的推送通知。心跳间隔越高,电池消耗越少,并且该设备从睡眠中醒来的次数就越少。

但是,这是一个很大的代价:心跳间隔的时间越长,确定插座连接损坏的时间就越长。在部署GCM之前,Google尚未在现实情况下对这些间隔进行彻底的测试。这些间隔的问题是由网络路由器和移动载体引起的,他们在几分钟的不活动之后断开了闲置套接字连接。通常,这在廉价的家用路由器中更为普遍,其制造商决定使用怠速插座连接的最大寿命,并终止它以节省资源。这些路由器只能处理有限数量的并发连接,因此采取此措施以防止超负荷。这导致终止GCM插座,并且是时候发出GCM消息时,它不会到达设备。该设备只会意识到,在发送心跳的时间为0 - 28分钟后,该连接已被打破,在某些情况下(例如,当消息至关重要时)在某些情况下毫无用处。根据我的经验,大多数便宜的路由器在不活动5 - 10分钟后终止空闲连接。

我写了一篇关于此和其他GCM问题的整个帖子:

http://eladnava.com/google-cloud-messaging-extremely-unreliable/

Google Cloud Messaging的替代方案

Pushy(https://pushy.me/)是独立的推送通知网关,完全独立于GCM。它像GCM一样保持自己的背景套接字连接,以接收推送通知。基本协议是MQTT,这是一种非常轻巧的酒吧/子协议,利用很少的网络带宽和电池。

Pushy的一个巨大优势是,(从服务器)发送推送通知的代码并注册设备以进行通知,实际上是可以在GCM和Pushy之间互换的。这使得在实施GCM并为其不稳定性抛弃之后,非常容易切换到急躁。

(全面披露:我为自己的项目创立了急速,并意识到许多应用程序将从此类服务中受益)

gcm据报道是一个非常严重的问题,因为保持阳性的心跳并不那么可靠。因此,由于它仅每15分钟(超过3G)或28分钟(通过WiFi)进行一次派遣,因此,如果由于某种原因,服务器连接已删除,则可能不会在几分钟内恢复。

这些类型的恶作剧促使开发一种不依赖第三方网络的解决方案来传递大规模可靠且可靠的推送通知,以脱机(背景)Android Apps。

https://help.pubnub.com/entries/21720011-can-my-android-app-receive-messages-messages-messages-while-inactive

gcmlastcall是最后一次收到消息,因此我们可以判断GCM是否停止。

现在工作了几天,似乎还可以

最新更新