Я работаю с GCM в своем приложении, и у меня есть проблема.
В большинстве случаев я получаю сообщения сразу, но иногда сообщения появляются через 5 минут, один за другим, как будто они застряли в пути. Это нормально?
Я работаю с GCM в своем приложении, и у меня есть проблема.
В большинстве случаев я получаю сообщения сразу, но иногда сообщения появляются через 5 минут, один за другим, как будто они застряли в пути. Это нормально?
Часть каркаса GCM на клиентском телефоне использует TCP-соединение на порту 5228. Это соединение используется для push-уведомлений, но поскольку каждое соединение tcp может идти в тайм-аут с некоторыми маршрутизаторами/несущими которые применяют строгие политики для уничтожения неактивных подключений tcp (tcp idle timeout).
Большинство маршрутизаторов wifi убивают неактивные соединения через 5 минут, например, мои.
В рамках GCM используется механизм keep-alive для отправки сетевого пакета через каждые 15 минут на Wi-Fi и каждые 28 минут на 3G. Этот keep-alive не всегда надежный для всех пользователей.
Я открыл проблему для google здесь: https://productforums.google.com/forum/#!category-topic/nexus/connecting-to-networks-and-devices/fslYqYrULto Они соглашаются, что в настоящее время проблема.
Я еще не заметил, что в моем крайне ограниченном тестировании до сих пор, но из моего понимания документации это не звучит ужасно неожиданно:
GCM обычно доставляет сообщения сразу после их отправки. Однако это не всегда возможно. Например, устройство может быть отключено, отключено или недоступно. В других случаях сам отправитель может запросить доставку сообщений до тех пор, пока устройство не станет активным, используя флаг delay_while_idle. Наконец, GCM может преднамеренно задерживать сообщения, чтобы приложение не потребляло чрезмерные ресурсы и отрицательно влияло на срок службы батареи.
Между этим и языком во всей остальной документации, то, что вы описали, похоже на то, что я ожидаю. Там нет гарантии немедленной доставки; вы обычно будете получать сообщения сразу, но иногда вы этого не сделаете.
Я нахожу то же самое, что и оригинальный плакат. Кажется, что до 5 минут "проснуться", а затем очень быстро обрабатывает сообщения.
Мое приложение обрабатывает текстовые объекты в разговоре с глухим человеком. Вызывающий инициирует разговор, а глухой человек отвечает по телефону. Задержка происходит только на первом шаге, новое сообщение "не в синем". Как только это делается для первого (приложение, устройство, системный идентификатор?), Другие проходят очень быстро, почти мгновенно.