Android Client-Server-Kommunikation: push oder poll?

noobadix

Bekanntes Mitglied
Hallo!

Ich möchte meine Client-App mit sich unregelmäßig ändernden Daten eines Servers versorgen. Diese Daten sind Spielzüge, wobei sich ein Spiel über Tage erstrecken kann, die App soll nur im privaten Kreis mit wenigen Anwendern betrieben werden.

Nun stehe ich zunächst vor der Wahl ob ich polling oder push mit Google Cloud Messaging (GCM) betreiben möchte und bitte um eure Einschätzung.

Allzu tief habe ich mich in GCM nicht eingearbeitet, aber es wirkt doch zunächst etwas kompliziert und scheint besondere Berechtigungen bei der Installation des Clients zu benötigen und zudem müssten wohl die Google Play Services installiert sein, wovon ich nicht ausgehen möchte.

Beim pollen hingegen befürchte ich unnötigen Akkuverbrauch, weil die CPU vielleicht nicht in den sleep oder deep sleep modus käme, wie stark sich das in der Praxis auswirkt, kann ich nicht einschätzen. Eine Synchronisation würde sich auf etwa 500 Zeichen lange Strings beschränken. Ich würde mit dem AlarmManager alle fünf Minuten einen Service starten lassen, der den Server abfragt.

Welche Methode empfehlt ihr? Push oder Poll?
Wenn Poll, ist der AlarmManager geeignet oder gibt es bessere Methoden?

Vielen Dank vorab und liebe Grüße!
 

dzim

Top Contributor
Ich hab der Einfachheit halber Poll gemacht. Und wenn es dir genügt, das er nur in einer definierten Frequenz pollt, ist das sicher auch ausreichend. (Ich trigger so im 4 Uhr früh z.B. eine Notification... Nachdem ich zuvor Daten von einem Server geholt habe.)

Wie gesagt: Es hängt davon ab, wie zeitkritisch deine Updates (von was auch immer) sind.
 
Zuletzt bearbeitet:

noobadix

Bekanntes Mitglied
Hallo!
Danke zunächst für deine Antwort.
Was "zeitkritisch" betrifft: In etwa so wie bei einem Schachspiel. Und ja, pollen wäre einfacher. Ich erstelle vielleicht einfach mal eine Testreihe und schaue selbst, wie es mit den sleep-Zeiten und dem Akku aussieht.
 

Thallius

Top Contributor
Ich finde pollen ist immer schlecht. Der einzige Vorteil ist, dass auch der dümmste und faulste Programmierer das hinbekommt.

Wenn ich als Programmierer auch nur ein bischen Ehrgeiz und Anspruch an mich selber habe, dann beisse ich mich durch die Push-Notifications und mache es richtig.

Programmieren beudetet ein ständiges Lernen und dazu gehört eben nicht nur Video-Tutorials anzusehen sondern auch Dokus zu API zu lesen (Am besten in Englisch, das schult auch gleich die wichtigste Fremdsprache die man als IT'ler fließend können sollte), sich zu informieren was es neues gibt, um immer auf dem neusten Stand zu sein und ebenso sich in allen Bereichen der IT ein wenig einzulernen und auszukennen.

Ich bin jetzt seit über 30 Jahren Freelancer und mein Arbeitstag endet nicht um 16Uhr oder wenn ich den Rechner ausschalte. Ich lerne ständig neue Dinge, auch Abends auf der Couch und am Wochenende. Wer dazu keinen Bock hat, der braucht sich auch nicht wundern wenn er immer nur schlecht bezahltes Mittelmaß bleibt.

Sorry aber das musste mal gesagt werden

Claus
 

dzim

Top Contributor
@Thalius: Ich stimme Grundsätzlich zu, dass Push die sauberste Lösung ist. Ich bin jetzt zwar nicht der "Alte Hase", als den du dich hier gerade zu profilieren suchst, aber auch ich bin täglich (während und nach der Arbeit) mit irgendeiner Form von Weiterbilden beschäftigt. Aber: Wenn ich nur eine kleine Anwendung schreiben möchte, frag ich mich ernsthaft, ob der Aufwand den Nutzen rechtfertigt - das man dabei jedoch etwas lernt, steht hier ausser Frage!

Wie dem auch sei: Wir haben bisher noch nicht viel Butter bei die Fische geliefert, oder?

Poll:
Einfach zu implementieren, musst nur einen Server haben, der die Nachrichten empfängt und von dem die anderen sich diese wieder abholen. Und man muss ja nicht dauerhaft pollen, sondern nur alle Stunde oder so (z.B. via AlarmManager).
Und ich muss mich korrigieren: Ich trigger meine Notifications nur mit dem AlarmManager. Das Polling war nur eine notdürftige Idee, die aber für den Augenblick wieder verworfen wurde (eben weil es, wie Thalius schon so eloquent ausdrückte, bestenfalls eine Notlösung sein kann - besser wäre irgendeine Form von Push-Notification).

Push:
Ohne es genauer zu spezifizieren, kann ich nur mutmassen, was Thalius für Push meint. Es gibt sicher mehrere (mehr oder weniger sinnvolle) Varianten. Ich schaue erst mal nach den kostenlosen.
- Google Cloud Messaging. Sicher das am besten in Android integrierte. Ich persönlich würde aber für dein geschildertes Szenario nicht gern die Daten über einen Goolge-Server schicken.
- RabbitMQ - OpenSource, es gibt Tutorials, aber du musst dich wahrscheinlich um mehr selbst kümmern.
- MQQT - OpenSource, ...
- ... mehr kenne ich nicht, hab es auch noch nie wirklich gebraucht.

Für alles findet man wahrscheinlich recht viel Material auf StackOverflow und GitHub/Bitbucket.

Ach und nur weil es sicher auch ginge: Interessant (aber möglicherweise durch den Nachrichten-Overhead weder sparsam noch super sinnvoll) wäre vielleicht das Ganze via XMPP zu machen. Wird auf dem Telefon wahrscheinlich mehr Strom ziehen und wäre wahrscheinlich eher sinnvoll, wenn Spiel-Updates schnell an alle Mitspieler verteilt werden sollen.
Push ist ja auch nichts weiter, als ein ferngesteuerte Poll (OK: das ist jetzt sehr stark verallgemeinert und es hängt auch absolut von der Implementierung ab). Man kann zwar den Payload mitschicken, aber meist ist es ja eher so, das man den anderen Geräten nur sagt: "Achtung, es gibt für dich upgedatete Daten." (Sprich: Dem Gerät wird gesagt, es muss pollen \o/ )
 

Thallius

Top Contributor
Ich weis ja nicht was du unter Pollen verstehst aber für mich ist das zyklisches Anfragen an einen Server ob es schon was neues gibt. Wenn ich also nach einem Push EINMAL die mit Sicherheit jetzt anliegenden neuen Daten abhole, dann hat das mit Pollen mal so gar nichts zu tun.

Gruss

Claus
 

dzim

Top Contributor
Du weisst schon, das Polling nicht notwendigerweise ein zyklisches Anfragen sein muss. Auch wenn du nur einmal Daten holst, pollst du damit schon. Bei Google werden nur sowieso schon offene Verbindungen in deren IT-Landschaft genutzt, irgendwo abzufragen, ob es Nachrichten gibt. Wenn ja, müssen sie abgeholt - also gepollt - werden.

Aber das hat jetzt eher weniger mit dem zu tun, was man gemeinhin (in der Entwicklergemeinde) unter den Begriffen so versteht, also sei's drum und draufgeschissen.
 

noobadix

Bekanntes Mitglied
Hi,

habt herzlichen Dank für die Überlegungen! Ja, stetiges Lernen ist gewiss insbesondere in der IT-Branche erste Pflicht und so belastend das mitunter sein mag, so spannend finde ich es doch immer wieder. Ich hoffe, euch geht das ebenso. :)
Nun bin ich leider nur unausgebildeter Hobbyprogrammierer und muss mir vieles ergooglen, kenne viele übliche Technologien nicht und kann deren Wert mitunter nur schwer einschätzen, wenn ich sie als solche gar nicht erst erkenne, wie z.B. GCM. "Sieht kompliziert aus, lohnt sich das?" - "Ja und alle (guten) Profis (die google mögen) machen es so." erschließt sich mir bei der ersten Begegnung auf bspw. StackOverflow nicht.

Nun habe ich auch noch einen Google IO-Beitrag über Synchronisation gehört und schlagende Argumente scheinen mir den einfachen Weg des pollings abzuschneiden und für GCM zu sprechen:
-Batterielaufzeit
-zentrale Anlaufstelle für den User für die De-/Aktivierung von App-Synchronisationen in den Account-Einstellungen von Android
-Übernahme der Verwaltung der diversen Sync-Anfragen verschiedener Apps durch den SyncManager von Android nutzt Bandbreite effektiv ("be nice to other apps" hieß es)


@dzim
Ob du folgendes noch erläutern könntest?
Ich persönlich würde aber für dein geschildertes Szenario nicht gern die Daten über einen Goolge-Server schicken.
Mich in XMPP einzuarbeiten scheint mir an dieser Stelle aufgrund der schon von dir genannten Gründe nicht allzu sinnvoll, zumal es ja auf Chat-Anwendungen ausgelegt ist.

Übrigens arbeite ich an einem "popligen" Quizduell-Klon, damit ihr das Szenario besser einschätzen könnt.

Gruß!
 
Zuletzt bearbeitet:

dzim

Top Contributor
Klar ist XMPP für Chat gedacht, aber man kann es halt auch für mehr gebrauchen.
In Bezug auf Chat, hab ich mal folgendes Szenario gehabt: Unsere Firma hatte einen internen Jabber-Server betrieben, damit man sich mit den Kollegen schnell mal abstimmen konnte. Wir hatten ein Remote-System, bei dem wir immer erst einen IPSec-Tunnel öffnen mussten. Dort lief dann wieder ein XMPP-Client (mit Smack implementiert; als Deamon), der bei Log-Ins dann an den sich einloggenden (er hatte ein Mapping von registrierten IPSec-Cert auf den Jabber-Namen) eine Nachricht geschickt. Der User musste die Frage beantworten, warum er sich eingeloggt hatte. Wurd nicht geantwortet, fing der Client an zu nerven :)
Wir hatten einfach die Auflage, das wir loggen sollten, wann sich wer einloggt und idealerweise auch warum. Allerdings wurde es irgendwann wirklich lästig und der Auftraggeber hat eingesehen, dass das etwas overkill ist, also wurde es wieder abgechaltet. Das zu implementieren, war aber interessant.

Was meine Überlegungen bzgl. GCM anbelangt... Versteh' mich nicht falsch. Das ist schon cool und so, aber ich Zweifel manchmal am Sinn, so viel Google anzuvertrauen - auch wenn es nur "poplige" Quiz-Nachrichten sind. Ich würde halt GCM nur nutzen, wenn ich sowieso schon die Infrastruktur in der App nutze (z.B. Play Services für eine Map; wird im Play Store angeboten; ...). Im privaten Sektor würde ich eher nach OpenSource-Lösungen schauen, bei der ich die Kontrolle über die Daten habe. Und ich würde es auch überlegen, wenn ich vor hätte, die App auf andere Stores (Amazon) zu bringen.

Auf jeden Fall hat Thallius insofern recht, dass das der sauberste Weg ist (push). Und ob du das später x-mal anpassen willst, glaube ich nicht.
Also viel Erfolg bei den Push-Notifications! In welcher Form auch immer.
 

Thallius

Top Contributor
Programmier es fürs iPhone, da ist die Push-Notification komplett von Apple dabei und in 15 Minuten fertig programmiert :)

SCNR

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Android Server-Client-Verbindung in Android-App mit Sockets aufbauen Android & Cross-Platform Mobile Apps 5
N Java ME Server-Client Verbindung über Wifi Android & Cross-Platform Mobile Apps 6
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
M Android TCP Client Android & Cross-Platform Mobile Apps 4
ruutaiokwu Android Selbst entwickelter SMTP-Client läuft auf PC, nicht aber auf Android Android & Cross-Platform Mobile Apps 9
M Android Simpler TLS/SSL Client Android & Cross-Platform Mobile Apps 11
R Android Mail Client öffnen Android & Cross-Platform Mobile Apps 4
Exdroid Android Broadcast client Android & Cross-Platform Mobile Apps 1
W Android HTTPS-Verbindung mit Client-Authentifizierung Android & Cross-Platform Mobile Apps 0
M Einfache Rechenoperation über TCP Server Android & Cross-Platform Mobile Apps 15
J Android Server-Login Daten in der App sicherer hinterlegen? Android & Cross-Platform Mobile Apps 7
M App Datenbank Server Android & Cross-Platform Mobile Apps 5
B Android TCP-Verbindung zum Server über welche Prozess auslagerung nutzen? Android & Cross-Platform Mobile Apps 1
K Android Zugriff auf FTP-Server Android & Cross-Platform Mobile Apps 1
M Android Nur erste Zeile wird vom Server empfangen Android & Cross-Platform Mobile Apps 0
L Zugriff auf entfernten mySQL-Server via Android Android & Cross-Platform Mobile Apps 4
K Android verbinden mit verschlüsselten Server Android & Cross-Platform Mobile Apps 2
M Inhalt eines Eingabefeldes an einen Server senden? Android & Cross-Platform Mobile Apps 9
T Android KontrollApp für Nitrado Server Android & Cross-Platform Mobile Apps 2
D gpx-Datei von Smartphone auf Server uploaden Android & Cross-Platform Mobile Apps 4
S Android binäre Daten zwischen Android und einem Java-Server Android & Cross-Platform Mobile Apps 5
K BT-Server EOFException abfangen Android & Cross-Platform Mobile Apps 2
M Android Von Smartphone auf Daten von Server zugreifen Android & Cross-Platform Mobile Apps 2
S Android Zugriff auf FTP Server Android & Cross-Platform Mobile Apps 7
A "HandyClient-Server-modell" Android & Cross-Platform Mobile Apps 7
D messages via xml zwischen server/clienthandy verschicken Android & Cross-Platform Mobile Apps 5
G Android UDP Kommunikation Android & Cross-Platform Mobile Apps 1
S Kommunikation im Hintergrund Android & Cross-Platform Mobile Apps 10
? Android erstellen der grafischen Benutzeroberfläche und Kommunikation zwischen Apps Android & Cross-Platform Mobile Apps 8
Fab1 Kommunikation Fernbedienung --> Smartphone Android & Cross-Platform Mobile Apps 5
G Android Kommunikation zwischen den Activities Android & Cross-Platform Mobile Apps 1
S Android Kommunikation zwischen UI -> Service -> Thread Android & Cross-Platform Mobile Apps 4
C Android Kommunikation zwischen Service und Activity Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Neue Themen


Oben