【问题标题】:Flow Control between gcm and 3rd party app servergcm 和 3rd 方应用服务器之间的流控制
【发布时间】:2014-05-25 15:26:35
【问题描述】:

我是 android 开发的新手,我现在正在开发推送通知应用程序,并试图了解 GCM 如何在服务器端和客户端工作的概念

我被 google android 开发者网站上的 Flow Control 中给出的概念之一困住了。

http://developer.android.com/google/gcm/ccs.html#flow

他们给出了这样的东西:

发送到 CCS 的每条消息都会收到一个 ACK​​ 或一个 NACK 响应。 未收到这些回复之一的邮件将被视为 待办的。如果待处理消息数达到 1000,则第 3 方应用 服务器应该停止发送新消息并等待 CCS 确认一些现有的待处理消息。

相反,为了避免第 3 方应用服务器过载,CCS 将 如果有太多未确认的消息,则停止发送。所以, 第 3 方应用服务器应“确认”上游消息,从 通过CCS客户端应用程序,尽快维护一个 传入消息的持续流动。上述待处理消息 限制不适用于这些 ACK。即使未决消息计数 达到 1000,第 3 方应用服务器应继续发送 ACK 用于从 CCS 接收到的消息,以避免阻止新消息的传递 上游消息。

ACK 仅在一个连接的上下文中有效。如果 在可以确认消息之前关闭连接,第 3 方应用程序 服务器应等待 CCS 重新发送上游消息之前 再次确认。类似地,所有待处理消息的 ACK/NACK 在连接关闭之前未从 CCS 收到 再次发送。

我的问题是

1 >> 这是第 3 方应用服务器和 gcm 服务器之间的流程吗?

2 >> 为什么第 3 方服务器只能发送 1000 个请求,如果发出更多请求会怎样?

3 >> gcm 什么时候发送 ACK 和 NACK?从某种意义上说,当向第 3 方服务器发出 gcm 请求时,gcm 会检查设备是否已注册(抛出注册 id),或者它是否确认将消息传递到已注册的已注册设备,然后发送 ACK 到第三方服务器?

4 >>服务器什么时候收到NACK?从某种意义上说,在什么情况下它会收到 NACK ?

提前致谢!

【问题讨论】:

    标签: android push-notification google-cloud-messaging


    【解决方案1】:

    按顺序:

    1. 是的(更准确地说,它是 CCS 和第 3 方之间通过 XMPP 的流程)

    2. 1000 是避免 CCS 泛滥的阈值。这是一个速率限制,消息数量不受限制(并且免费...)。

    3. 每次发送有效请求(向设备发送消息)时,都会有一个 ACK​​ 指示它将被发送。 NACK 会就您的请求中的错误向您发出警告。

    4. 见上文。

    【讨论】:

    • 感谢您的回复,它帮助我解决了我的大部分疑问并回答了我的 1,3,4 问题。但我对第二个问题仍有疑问......什么是速率限制?是不是意味着没有。每个请求的消息数?还是要发送消息,我必须发送单独的请求?
    • 如果您有一个 非常快 的第三方服务器,并且您正在发送大量消息(在 CCS over XMPP 中,没有“批量消息”,您可以发送它们)一个接一个),并且 CCS 服务器没有时间确认它们(根据我的测试,来自 CCS 的确认非常快),那么,如果未确认的消息数量达到 1000,则您的第 3 方服务器应该延迟后续消息。我相信这是一个非常极端的案例。
    • 感谢您的回答大相径庭,这消除了我的疑虑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2014-07-07
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多