我有一个在 GAE 上运行的 Java 服务器来支持 Android 应用程序。
当应用程序启动时,它会向服务器发出请求 - 该请求应尽快返回。该请求还应该触发几秒钟的二次处理 - 次要因为它不需要响应,所以我希望它在请求完成后发生。
以下是我正在考虑如何做到这一点的选项:
最明显的解决方案是应用程序在第一个请求完成时执行第二个请求。这似乎相当浪费,因为通常不会发送或接收数据。如果二次处理确实为客户端(20%)产生了一些额外的数据,我也可以通过 GCM 发送它,因为 GCM 支持有效负载。
DeferredTasks听起来很完美,但由于它们是在任务队列之上实现的,我猜它们会遇到与任务队列相同的问题。
TaskQueues听起来也很合适,但稍微阅读一下就会发现它们的时间变化很大——通常会有相当大的延迟。正如我上面提到的,在 20% 的情况下,我的二次处理会产生一些额外的数据发送给客户端,以显示给用户。
如果我的任务在 10 秒内执行,80% 的时间,那会很好,但听起来情况并非如此。[编辑:抱歉,并不是说剩下的 20% 无关紧要——我仍然希望它们在 20-30 秒内发生,例如当用户仍在应用程序中时。]
有什么方法可以配置我的应用程序,以便推送任务队列获得相当高的优先级而不会产生不必要的成本?
异步网址获取。在我看来,如果我在完成初始请求之前对我自己的一个 URL 进行异步 url 获取,那么这将达到我的目的。我能想到的主要负面因素可能会导致 GAE 启动我的应用程序的新实例,因为它试图在初始请求完成之前处理新请求。为了效率和成本,我宁愿让我的二次处理与我的初始请求一起进行。
线程不是选项AFAIK。在我的请求处理程序中产生的线程不能超过请求处理程序本身的生命周期。
那么,这些选项中的哪一个(或其他选项?)最适合我的目的?