0

У меня есть приложение для Android, которое использует Google Cloud Endpoints для синхронизации данных между устройствами. В настоящее время в каждом вызове api сообщение GCM отправляется на все другие устройства. Часто устройства не только выполняют один вызов api, но и несколько сразу после друг друга. В этой ситуации становится крайне неэффективно отправлять сообщение в каждом вызове, потому что тогда все остальные устройства делают несколько вызовов для получения новых данных вместо одного для всех.Объединить несколько сообщений GCM в AppEngine

Так что моя идея в основном после вызова api ~ ~ 10 секунд, а затем отправить сообщение GCM. Всякий раз, когда приходит новый вызов, и таймер сбрасывается.

Моя проблема: я действительно не знаю, как это сделать в AppEngine. Моя первая идея была TaskQueue с задачей, которая называется определенным образом и имеет 10-секундную задержку. В вызове API я проверяю, находится ли задача в очереди, и если да, я удаляю ее и вставляю новую. Это невозможно, потому что имя задачи нельзя использовать снова, даже если задача больше не существует.

ответ

0

Если ваше Android-приложение знает разницу между его вызовами на конечную точку: знает, что является «последним» вызовом, тогда он может сообщить серверу, следует ли уведомлять другие устройства.

Даже если это не так, вы могли бы что-то сделать на клиенте, аналогично тому, что вы говорите о работе на сервере: продолжайте откладывать, пока не убедитесь, что последний вызов сделан (например, пользователь завершил обновление данные), а затем выполнить «окончательный» вызов сервера, который вызывает отправку уведомлений. Это можно сделать в сервисе, если вы обеспокоены тем, что приложение будет убито до того, как будет сделан окончательный звонок.

Или вы можете сделать то же самое в получающем коде клиента: когда он получит уведомление GCM, оно может задержать, прежде чем действовать на него.

В любом случае, я считаю, что на самом деле проще (и дешевле) обрабатывать это на клиенте и поддерживать транзакцию сервера.

+0

Спасибо, что я позволю клиенту сообщить сервер, который является последним. –

0

Не было бы намного проще, если бы устройство явно указывало, когда отправлять сообщение GCM?