在AppEngine中组合多个GCM消息

时间:2013-03-07 00:13:00

标签: java google-app-engine google-cloud-messaging google-cloud-endpoints

我有一个Android应用,它使用Google Cloud Endpoints在设备之间同步数据。当前在每个api调用中,GCM消息被发送到所有其他设备。通常,设备不仅会执行一次api调用,而且会直接执行多次api调用。在这种情况下,在每次调用中发送消息的效率非常低,因为所有其他设备都会进行多次调用以获取新数据,而不只是一次调用。

所以我的想法基本上是在api调用等待~10秒后然后发送GCM消息。每当有新的呼叫进入并且计时器被重置时。

我的问题是我真的不知道如何在AppEngine中执行此操作。我的第一个想法是一个TaskQueue,其任务以某种方式命名,延迟时间为10秒。在API调用中,我检查任务是否在队列中,如果是,我将其删除并插入一个新任务。这是不可能的,因为即使任务不再存在,也无法再次使用任务名。

2 个答案:

答案 0 :(得分:0)

让设备明确指出何时发送GCM消息会不会更容易?

答案 1 :(得分:0)

如果您的Android应用知道其端点呼叫之间的差异:知道哪个是“最终”呼叫,那么它可以告诉服务器是否通知其他设备。

即使没有,你也可以在客户端上做一些与你在服务器上所做的事情类似的事情:保持延迟,直到确定最后一次调用已经完成(例如用户已完成更新数据)然后执行“最终”服务器调用,这会导致发送通知。如果你担心应用程序会在最后一次调用之前被杀死,这可以在服务中完成。

或者,您可以在客户端的接收代码中执行相同的操作:当它收到GCM通知时,可能会在对其进行操作之前延迟。

无论哪种方式,我认为在客户端处理此问题并保持服务器事务处理更容易(也更便宜)。