Ограничение скорости Превышена ошибка при использовании API Google Cloud Messaging

При использовании Google Cloud Messaging API для отправки сообщений между бэкэнд-сервером и клиентом Android/Chrome сервер базы данных может время от времени получать лимит скорости, превышающий код ответа. Этот код является "DeviceMessageRateExceeded" для HTTP Connection Server и "DEVICE_MESSAGE_RATE_EXCEEDED" для сервера облачных подключений.

Каков этот код ошибки и как его можно управлять?

Ответ 1

Код исключения ограничения скорости указывает, что вы слишком часто отправляете сообщения с серверного сервера. Чтобы обеспечить стабильное обслуживание, на количество сообщений, которые могут быть отправлены с серверного сервера, есть ограничение на минуту/на устройство. Этот предел установлен на высоком уровне, поэтому не следует влиять на большинство приложений, работающих с лучшими приложениями, однако все приложения должны быть готовы получить этот код ошибки.

Как указано в вопросе, в случае HTTP Connection Server, код ошибки будет "DeviceMessageRateExceeded". А для Cloud Connection Server будет использоваться "DEVICE_MESSAGE_RATE_EXCEEDED", который заменяет предыдущий код ошибки "QUOTA_EXCEEDED".

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

Ответ 2

CCS downstream ack не учитывается в квоте.

Квота DeviceMessageRateExceeded ударяется, когда вы отправляете слишком много сообщений на одно устройство - вам не нужно отбрасывать всю отправку, только на этот идентификатор регистрации. Убедитесь, что вы обрабатываете ответ "Канонический" идентификатор регистрации - возможно, что несколько регидов указывают на одно и то же устройство.

В C2DM использовался "quota_exceeded" - GCM в настоящее время не возвращает его. Если кто-то все еще использует C2DM - обработка предназначена для дроссельной/обратной передачи для всех сообщений. Или еще лучше - перейти на GCM, который не имеет этой глобальной квоты.