Web服务中的GCM应用程序服务器

时间:2014-07-04 12:48:58

标签: android web-services google-cloud-messaging

我创建了一个Android应用程序,允许用户向其他用户发送消息。为了实现这个目标,我使用了GCM。因此,用户可以使用Web服务(使用Web API框架开发)发送消息,该消息将消息保存在远程数据库(SQL Server)上并联系GCM服务器以向接收者传递GCM消息。

可能会发生未收到GCM消息,例如因为GCM服务器暂时不可用。所以Google建议使用指数退避来尝试重新发送。这对我的架构来说是个问题,因为我从另一个WS(我创建的那个,从用户用来向其他用户发送消息)中调用GCM。如果我尝试使用exponensial back-off,我的外部WS应该是活动的,因为GCM返回一个有效的响应。

所以,似乎从另一个Web服务中调用GCM Web服务并不是一件好事。这是正确的吗?你能给我任何建议吗?使用GCM的最常见的IM应用程序架构是什么?

1 个答案:

答案 0 :(得分:0)

在我看来,您的问题是您向GCM发送邮件的网络服务是同步的(至少我根据您的问题假设)。即,它从您的客户端接收请求,向GCM服务器发送请求,并在从GCM服务器获得响应后向您的客户端返回响应。

我建议您更改架构。您的Web服务应该从您的客户端接收消息,将其存储在您的数据库中并将响应返回给客户端。

服务器中的单独线程应定期唤醒以查看数据库中是否有任何待处理消息,并尝试将它们发送到GCM服务器。如果您从GCM收到错误,表明您应该稍后重试,则使用下次发送尝试的时间戳更新数据库中的消息(并设置时间戳,该时间戳遵循指数退避要求)。如果您从GCM获得成功的响应,则会从数据库中删除该消息。