Java 在AppEngine中组合多个GCM消息

Java 在AppEngine中组合多个GCM消息,java,google-app-engine,google-cloud-messaging,google-cloud-endpoints,Java,Google App Engine,Google Cloud Messaging,Google Cloud Endpoints,我有一个Android应用程序,它使用谷歌云端点在设备之间同步数据。当前,在每个api调用中,都会向所有其他设备发送一条GCM消息。通常,一个设备不仅执行一个api调用,而且还直接在彼此之后执行多个api调用。在这种情况下,在每次呼叫中发送消息的效率极低,因为所有其他设备都会多次呼叫以获取新数据,而不是一次一次 所以我的想法基本上是在api调用后等待10秒,然后发送GCM消息。每当一个新的呼叫进来,定时器被重置 我的问题是我真的不知道如何在AppEngine中做到这一点。我的第一个想法是使用一个

我有一个Android应用程序,它使用谷歌云端点在设备之间同步数据。当前,在每个api调用中,都会向所有其他设备发送一条GCM消息。通常,一个设备不仅执行一个api调用,而且还直接在彼此之后执行多个api调用。在这种情况下,在每次呼叫中发送消息的效率极低,因为所有其他设备都会多次呼叫以获取新数据,而不是一次一次

所以我的想法基本上是在api调用后等待10秒,然后发送GCM消息。每当一个新的呼叫进来,定时器被重置


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

让设备明确指示何时发送GCM消息不是更容易吗?

如果您的Android应用程序知道其端点调用之间的差异:知道哪一个是“最终”调用,然后它可以告诉服务器是否通知其他设备

即使没有,您也可以在客户端上执行类似于您在服务器上所说的操作:持续延迟,直到确定已进行最后一次调用(例如,用户完成数据更新),然后执行“最终”服务器调用,从而发送通知。如果你担心应用程序会在最后一次呼叫之前被杀死,这可以在服务中实现

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


不管是哪种方式,我认为在客户机上处理这个问题并保持服务器的事务性确实更容易(也更便宜)。

谢谢,我会让客户机告诉服务器哪一个是最后一个呼叫。