我是Android开发的新手,我正在开发推送通知应用程序,并尝试概述GCM如何为服务器端和客户端工作
我坚持使用google android开发者网站上 Flow Control 中提供的一个概念。
http://developer.android.com/google/gcm/ccs.html#flow
他们给出了类似的东西:发送到CCS的每条消息都会收到ACK或NACK响应。 考虑未收到这些响应之一的消息 悬而未决。如果待处理的邮件计数达到1000,则为第三方应用程序 服务器应该停止发送新消息并等待CCS 确认一些现有的未决消息。
相反,为避免第三方应用服务器过载,CCS会 如果有太多未确认的消息,则停止发送。因此, 第三方应用服务器应该"确认"收到的上游消息 客户端应用程序通过CCS,尽快维护一个 传入消息的持续流动。上述待处理的消息 限制不适用于这些ACK。即使待处理的消息计数 达到1000,第三方应用服务器应继续发送ACK 对于从CCS收到的消息,以避免阻止新的传递 上游消息。
ACK仅在一个连接的上下文中有效。如果 在确认消息(第三方应用程序)之前关闭连接 服务器应该等待CCS重新发送上游消息 再次确认。类似地,所有未决消息的ACK / NACK 在连接关闭之前,没有收到CCS 再次发送。
我的问题是
1>>这是第三方应用服务器和gcm服务器之间的流程吗?
2>>为什么第三方服务器只能发送1000个请求?如果发出更多请求会发生什么?
3>>什么时候gcm会发送ACK和NACK?从某种意义上说,当向第三方服务器发出gcm请求时,gcm会检查设备是否已注册(抛出注册ID),或者是否确认将消息发送到已注册的ID设备,然后发送确认第三方服务器?
4>>服务器何时获得NACK?从某种意义上说,在什么情况下它会收到NACK?
提前致谢!
答案 0 :(得分:3)
按顺序:
是(更确切地说,它是CCS与XMPP之间的第三方之间的流程)
1000是避免CCS泛滥的门槛。这是一个速率限制,消息数量不受限制(并且免费...)。
每次发送有效请求(消息到设备)时,ACK表示它将被发送。 NACK会在您的请求中向您发出警告并提出错误。
见上文。