【问题标题】:GCM: how to avoid throttlingGCM:如何避免节流
【发布时间】:2023-03-03 02:57:01
【问题描述】:

我的 Android 系统需要向平板电脑应用程序(始终连接到 wifi 和电源插头的信息亭)发送频繁更新。
GCM-HTTP (//developer.android.com/google/gcm/http.html) 工作正常,但在某些情况下,单个设备可能会收到许多通知,触发此处描述的众所周知的限制问题 (//developer. android.com/google/gcm/adv.html#throttling)。这是一个问题,因为通知中的有效负载对系统非常重要。 防止这种情况的最佳解决方案是什么?

  • 在服务器中实现一项服务,将通知分组到同一设备并以有限的频率发送。
  • 使用 XMPP 服务。我想使用 GCM-XMPP (//developer.android.com/google/gcm/ccs.html) 但您需要登录白名单,所以我认为不是每个人都可以使用它。作为替代方案,我是否应该分别按照此处 (Android and XMPP: Currently available solutions) 和此处 (Better Way to implement the chat application using XMPP on Android?) 的建议使用 aSmack 或 Quickblox?
  • 如 (//thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/) 中所述实现基本套接字连接?在这种情况下,我必须考虑连接暂时丢失的可能性?

解决方案: 我找到了我的问题的解决方案,那就是 XMPP 协议。一开始,我在平板应用程序中实现了 aSmack,并配置了一个在本地运行的 eJabberd 服务器。实施非常简单。 几周后,我收到了一封来自 Google 的关于 GCM-XMPP 的邮件,它可以更快地嵌入到应用程序中并且工作得非常好!

【问题讨论】:

  • 嗨,你有解决方案吗?
  • 请不要在问题中编辑您的解决方案。而是回答您自己的问题并将问题标记为已回答。

标签: android sockets xmpp google-cloud-messaging


【解决方案1】:

也许将 time_to_live 设置为 0。

来自http://developer.android.com/google/gcm/adv.html

“为消息指定过期日期的另一个优点是 GCM 永远不会限制 time_to_live 值为 0 秒的消息。换句话说,GCM 将保证尽最大努力处理必须“现在或永远不会”传递。请记住,time_to_live 值为 0 意味着无法立即传递的消息将被丢弃。但是,由于此类消息从不存储,因此这为发送通知提供了最佳延迟。”

【讨论】:

  • 非常感谢您的宝贵时间。不幸的是,将 time_to_live 设置为 0 并不能防止节流问题。 developer.android 上的所有文档都已经深入研究过。
  • 那么您找到解决方法了吗?我正在部署一个应用程序,该应用程序需要每分钟向 100 多个设备推送通知,持续一个小时。我对节流问题感到非常紧张,但事先没有那么多设备要测试。
  • @deleElon79,你能解释一下节流和 ttl 并将其设置为 0 不会解决这个问题
  • @hahahut:限制问题实际上与设备每分钟接收多少条消息有关。因此,发送消息的设备数量并不重要(对于节流而言)。重要的是频率,所以理论上你可以只用一两个设备进行测试。你说的是 1msg/min,对我来说这似乎不是一个高频率,但谷歌没有指定最大频率,所以你必须运行一些有意义的时间长度的测试。如果您不满意,您应该切换到更“可靠”的 XMPP 协议,尤其是当您的消息对时间要求很高时。
  • @deleElon79 他们还说 gcm 可以直接用于即时通讯应用等应用中。如果他们限制像 im 这样的应用程序,它将如何工作。假设 ttl 为 0,服务器每分钟发送大量消息。如果它们现在不能交付,那么它们将被丢弃。没有节流。但是文档没有说明他们如何停止滥用服务。
猜你喜欢
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
相关资源
最近更新 更多