10

Google 클라우드 메시징 API를 사용하여 백엔드 서버와 Android/Chrome 클라이언트간에 메시지를 보낼 때 백엔드 서버가 때때로 속도 제한을 초과하는 응답 코드를 수신 할 수 있습니다. 이 코드는 HTTP Connection Server의 경우 'DeviceMessageRateExceeded'이고 Cloud Connection Server의 경우 'DEVICE_MESSAGE_RATE_EXCEEDED'입니다.Google 클라우드 메시징 API를 사용하는 경우 속도 제한 초과 오류

이 오류 코드는 무엇이며 어떻게 관리해야합니까?

답변

12

속도 제한 예외 코드는 백엔드 서버에서 너무 자주 메시지를 보내고 있음을 나타냅니다. 안정적인 서비스를 보장하기 위해 백엔드 서버에서 전송할 수있는 메시지 수에 대해 분당/장치 당 앱 상한선이 있습니다. 이 제한은 높게 설정되어 가장 잘 작동하는 앱이 영향을받지 않아야하지만 모든 앱이이 오류 코드를받을 수 있도록 준비되어야합니다.

질문에 지정된대로 HTTP Connection Server의 경우 오류 코드는 "DeviceMessageRateExceeded"가됩니다. Cloud Connection Server의 경우 이전 오류 코드 "QUOTA_EXCEEDED"를 (를) 대체하는 "DEVICE_MESSAGE_RATE_EXCEEDED"가됩니다.

백엔드 서버가이 오류 코드를 받으면 메시지를 클라이언트에 보내는 속도를 늦추어 야합니다. 이상적으로는 exponential backoff을 구현하십시오.

+0

다운 스트림 ack가 할당량에 포함되어 있습니까? 다운 스트림 메시지를 다시 보낼 수있는 시간을 어떻게 알 수 있습니까? – doplumi

+0

메시지를 다시 보낼 수있는시기는 정확히 알 수 없지만 시스템 수준에서 다시 전송하려고하면 지수 백 오프를 사용해야합니다. – PaulR

+0

이미 지수 백 오프를 수행하고 5xx 오류 코드에 대한 Retry-After를 고려해도 충분합니까? –

6

CCS downstream ack는 할당량에 포함되지 않습니다.

단일 장치에 너무 많은 메시지를 보낼 때 DeviceMessageRateExceeded 할당량에 도달합니다. 모든 전송을 해당 등록 ID로 백 오프 할 필요가 없습니다. "정식"등록 ID 응답을 처리해야합니다. 여러 개의 지국이 동일한 장치를 가리키는 것이 가능합니다.

'quota_exceeded'가 C2DM에 사용되었습니다. 현재 GCM은이를 반환하지 않습니다. 다른 사람이 여전히 C2DM을 사용하는 경우 처리는 모든 메시지에 대한 스로틀/백 오프 전송입니다. 또는이 글로벌 할당량이없는 GCM으로 이전하는 것이 더 좋습니다.