0

我有一个Android应用程序,它使用Google Cloud Endpoints在设备之间同步数据。目前在每个API调用中,GCM消息将被发送到所有其他设备。通常,设备不仅可以进行一次api通话,而且可以直接通过多个通话。在这种情况下,在每个呼叫中​​发送消息的效率非常低,因为所有其他设备都会进行多次呼叫以获取新数据,而不是全部呼叫。在AppEngine中合并多个GCM消息

所以我的想法基本上是一个API调用后等待~10秒,然后发送一个GCM消息。每当一个新的电话进来,计时器重新设置。

我的问题是我真的不知道如何在AppEngine中做到这一点。我的第一个想法是一个TaskQueue,其任务命名方式有10秒延迟。在API调用中,我检查任务是否在队列中,如果是,我将其删除并插入一个新的。这是不可能的,因为即使任务不再存在,任务名称也不能再次使用。

回答

0

如果你的Android应用程序知道它的端点调用之间的区别:知道哪个是'最终'调用,那么它可以告诉服务器是否通知其他设备。

即使没有,你也可以在客户端上做类似于你在服务器上所做的事情:保持延迟,直到确定最后一次调用已经完成(例如用户完成更新数据),然后执行导致通知被发送的“最终”服务器调用。如果您担心应用程序在最终通话发生前被杀,可以在服务中完成此操作。或者,您可以在客户端的接收代码中执行相同的操作:当它收到GCM通知时,它可能会在执行该操作之前进行延迟。

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

+0

谢谢我让客户告诉服务器哪一次是最后一次调用。 – 2013-03-07 08:08:18

0

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