11

Wollte man die grundlegenden Gründe für Push-Benachrichtigungen wie Google Cloud Messaging (früher Google Cloud to Device Messaging genannt), die batteriefreundlicher sind, für Cloud < -> Gerätekommunikation verstehen?Warum und wie ist eine Push-Notification (wie GCM) Batterie effizient?

Meiner Ansicht nach beinhalten die alternativen Technologien "Polling" (über TCP/IP), während die Verbindung im CONNECTED-Zustand bleibt und Keep-Alive verwendet wird. Oder gibt es etwas Besseres?

Mein begrenztes Verständnis von GCM ist, dass es auch TCP/IP und Keepalives verwendet, aber der Client fragt nie den Server für den Status ab. Stattdessen informiert der Server den Client über eine eingehende Nachricht, und Anwendungen, die bestimmte Nachrichtentypen abonnieren, werden über die Nachricht asynchron benachrichtigt. Auch die gemeinsame GCM-Verbindung wird von mehreren Anwendungen gemeinsam genutzt, so dass die Geräteelektronik zu "koordinierten" Zeiten schlafen/schlafen kann, ohne dass mehrere Anwendungen die Elektronik mehr "EIN" (elektrisch aktiv) halten, als sie benötigen. Ist das das richtige Verständnis? Oder ist da mehr dran?

Schließlich, wie genau ist das im Vergleich zu MQTT über TCP/IP mit Keepalives? Was sind die Gründe dafür, dass MQTT (anscheinend) weniger Batterie-effizient ist als GCM?

Antwort

10

Einer der Hauptgründe, warum es effizient ist, ist, dass es gut skaliert. Das Android-Gerät hält eine einzelne Verbindung für GCM-Server offen, um nach Benachrichtigungen für ALLE Apps auf dem Gerät zu suchen, und leitet dann Nachrichten an die entsprechenden Anwendungen weiter, für die sie vorgesehen sind. Dies ist viel besser skalierbar und effizienter, als eine Netzwerkverbindung für jede einzelne Anwendung offen zu halten, die eine Art Push-Benachrichtigung wünscht.

Die Verbindung selbst ist wahrscheinlich eine TCP-Verbindung, die in einem offenen Zustand gelassen wird, selbst wenn das Telefon untätig ist. Es kann das Gerät wecken, wenn Daten empfangen werden. Ich könnte mir vorstellen, dass es auch einen Heartbeat-Ping gibt, der die Verbindung bei Bedarf wiederherstellen kann.

Das Socket-Zeug ist wahrscheinlich etwas, was Sie selbst tun könnten, aber wie ich schon sagte der Hauptgrund für Effizienz ist die einzige Verbindung für alle Apps. Sehr skalierbar.

+6

Ein weiterer Grund, warum GCM insbesondere Batterie spart, ist die Kombination der Meldeparameter "collapse_key" und "delay_while_idle". Wenn nur die letzte Nachricht in einer Folge von Nachrichten von Bedeutung ist (z. B. Punktebenachrichtigungen von einem Fußballspiel), empfangen untätige Geräte nicht die unnötigen Nachrichten, nur die neuesten, wenn das Gerät aufwacht. Ältere Nachrichten werden durch die neueren im GCM-Server ersetzt und nur das neueste wird ausgeliefert, was zu einem geringeren Batterieverbrauch führt. – Piovezan

Verwandte Themen