10

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

Что это за код ошибки и как его следует управлять?

ответ

12

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

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

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

+0

Является ли нижестоящий ack учтено в квоте? Как узнать время, в которое я смогу отправить последующие сообщения снова? – doplumi

+0

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

+0

Если мы уже выполняем экспоненциальное отсрочку и уважаем повторную проверку для кодов ошибок 5xx, должно быть достаточно? –

6

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

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

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

Смежные вопросы