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消息會不會容易得多?