我在GAE上運行Java服務器以支持Android應用程序。如何在GAE響應後進行一些處理
當應用程序啓動時,它向服務器發出請求 - 該請求應該儘快返回。該請求也應該觸發幾秒鐘的二級處理 - 次要的是響應沒有必要,所以我希望它在請求完成後確實發生。
下面是我在考慮如何做到這一點的選擇:
最明顯的解決方案是應用第一個完成時執行第二請求。這似乎相當浪費,因爲通常不會發送或接收數據。如果輔助處理確實爲客戶端產生了一些額外的數據(20%),我現在可以通過GCM發送它,現在GCM支持有效載荷。
DeferredTasks聽起來很完美,但由於它們是在任務隊列之上實現的,我猜他們遭受與任務隊列相同的問題。
TaskQueues聲音也很合適,但有一點讀數表明他們的時間變化很大 - 通常會有相當的延遲。正如我上面提到的,在20%的情況下,我的輔助處理將產生一些額外的數據發送給客戶端,以顯示給用戶。
如果我的任務在10秒鐘內完成,80%的時間沒問題,但聽起來並非如此。 [編輯]對不起,並不是說剩餘的20%不重要 - 我仍然希望它們在20-30s內發生,例如,而用戶仍然在應用程序]
有一些方法我可以配置我的應用程序,使得推送任務隊列中獲得相當高的優先級,而不會產生不必要的費用?
異步網址提取。在我看來,如果我在完成初始請求之前對我自己的URL之一進行異步URL獲取,那麼這將符合我的目的。我能想到的主要負面因素是,這可能會導致GAE啓動我的應用程序的新實例,因爲它正試圖在初始請求完成之前處理新請求。爲了提高效率和成本,我寧願讓我的二次加工與我最初的要求一起進行。
主題不是一個選項AFAIK。在請求處理程序中產生的線程不能超出請求處理程序本身的壽命。
那麼,這些選項(或其他?)中的哪一個最適合我的目的?
哦,我沒有注意到我可以從該頁面獲得TQ處理延遲數據 - 哎呦。非常有用的數據。我可以看到其他人提到的高度可變性,並且可以理解這會使他們不適合大多數用戶正在等待數據的用例,但對於我的目的而言,我認爲這是可以接受的(雖然不是理想的)。 – Tom