Почему и как эффективна батарея push-notification (например, GCM)?

Хотелось понять основные причины push-уведомления, такие как облачные сообщения Google (ранее называемые Google Cloud для обмена сообщениями с устройствами), более дружественные к аккумуляторам, для связи с облачным телефоном?

На мой взгляд, альтернативные технологии включают "опрос" (по протоколу TCP/IP), сохраняя соединение в состоянии CONNECTED, используя keep-alives. Или есть что-то лучше?

Моя ограниченная работа GCM заключается в том, что она также использует TCP/IP и keepalives, но клиент никогда не проверяет статус сервера. Вместо этого сервер информирует клиента о входящем сообщении, а приложения, которые подписываются на определенные типы сообщений, уведомляются о сообщении асинхронно. Кроме того, общее соединение GCM разделяется между несколькими приложениями, что позволяет электронике устройства спячки/спячки в "скоординированные" времена, без использования нескольких приложений, чтобы электроника больше "ON" (электрически активная), чем они должны быть. Это правильное понимание? Или есть еще что-нибудь?

Наконец, как именно это сравнивается с MQTT над TCP/IP с keepalives? Каковы причины того, что MQTT (по-видимому) менее эффективен по сравнению с GCM?

Ответ 1

Одной из основных причин, по которой он эффективен, он хорошо масштабируется. Устройство Android поддерживает одно соединение, открытое для серверов GCM, для прослушивания уведомлений для ВСЕХ приложений на устройстве, а затем маршрутизирует сообщения в соответствующие приложения, для которых они предназначены. Это гораздо более масштабируемое и эффективное, чем поддержание сетевого подключения для каждого приложения, которое хочет иметь какие-то push-уведомления.

Само соединение, вероятно, является TCP-соединением, которое осталось в открытом состоянии, даже когда телефон переходит в режим ожидания. Он может разбудить устройство при получении данных. Я бы предположил, что происходит какой-то пульс, который может быть восстановлен, если это необходимо.

Содержимое сокета, вероятно, вы можете сделать сами, однако, как я сказал ранее, основной причиной эффективности является единственное соединение для всех приложений. Очень масштабируемый.