# Messenger App - Wie am besten auf Datenbank zugreifen?



## Leschge (10. Okt 2017)

Hallo zusammen,
ich arbeite zur Zeit ein einem Messenger Projekt. Der UI-Aufbau ist ähnlich wie in Whatsapp.
Als IDE benutzte ich Android Studio.

Nun bin ich am überlegen, wie ich am besten auf meine Datenbank zugreife, um Nachrichten hochzuladen und abzurufen. Dabei habe ich mir folgende Möglichkeiten überlegt und möchte gerne wissen, welche ihr nehmen würdet, bzw. wie ihr es realisieren würdet.

Idee 1:
Nachrichten werden per HttpRequest an ein PHP-Formular gesendet, der Server bearbeitet dann die Nachricht und schreibt sie in die richtige Datenbank/Tabelle oder erstellt diese wenn erforderlich.

Idee 2:
Nachrichten werden über die App per Java direkt an die Datenbank gesendet.

Um Nachrichten abzurufen läuft die Prozedur einfach andersherum ab. Würde gerne eure Meinung dazu einholen.
Ich persönlich finde die PHP-Lösung eleganter, verbraucht aber mehr Ressourcen und ist evt. nicht so sicher, da die Nachrichten sozusagen 2 mal verschickt werden müssen.

Freundliche Grüße


----------



## mrBrown (10. Okt 2017)

In jedem Fall 1.

Den Resourcenverbrauch kann man nicht so einfach betrachten, für 1 baucht man den zusätzlichen Server (brauchst du aber vermutlich sowieso und gewinnst durch den auch einiges), hat dafür keine resourcenlastigen Datenbank-Verbindungen von Seiten des Handys, sondern dort nur HTTP. Auf dem Server sind die DB-Verbindungen deutlich Resourcenärmer.

Mit 1. gewinnst du aber massiv an Sicherheit und zusätzlichen Möglichkeiten:
Bei 2. hat jeder Client zugriff auf die Datenbank, bei 1 nicht.
Bei 1. kannst du jede Nachricht validieren, kannst mit denen werweiswas anstellen, kannst push-Nachrichten nutzen, etc...


Die Sicherheit der reinen Verbindungen ist bei 1 & 2 kein Problem, wenn man es vernünftig löst. Die Probleme, die es bei 1 gäbe, gäbe es bei 2 genauso


----------



## Leschge (10. Okt 2017)

Vielen Dank!
Gute Argumente, wenn keiner mehr mit Gegenargumenten kommt, werde ich es auf diesem Weg programmieren


----------



## JuKu (13. Okt 2017)

Leschge hat gesagt.:


> Idee 1:
> Nachrichten werden per HttpRequest an ein PHP-Formular gesendet, der Server bearbeitet dann die Nachricht und schreibt sie in die richtige Datenbank/Tabelle oder erstellt diese wenn erforderlich.
> 
> Idee 2:
> Nachrichten werden über die App per Java direkt an die Datenbank gesendet.



Weder noch!
Idee 2 fliegt ganz raus, weil jeder auf alle Daten zugreifen könnte, es also quasi eine ziemlich große Sicherheitslücke wäre. @mrBrown hat dies bereits zur Genüge begründet.

Zu Idee 1:
Du musst deine Anforderungen kennen. Wenn du keinen Echtzeit Messanger und eine hohe Serverlast (dank vieler ständiger Abfragen) erreichen willst, dann sollest du auf Idee 1 setzen.
Wenn du stattdessen einen Echtzeit Messanger entwickeln willst, solltest du mit Socket / Websockets arbeiten, statt ständig neue Requests zu schicken. Dies ist effizienter und schneller. Zumal du dir auch überlegen musst, was passiert, wenn deine App geschlossen ist - dann würde der User nämlich keine Nachrichten mehr erhalten oder aber du nutzt einen Hintergrund Service, der dafür den Akku extrem schnell runterzieht.

Am besten erklärst du mal genauer, was du programmieren möchtest.
Soll es etwas ähnliches werden, wie Whatsapp? Oder eher ein Chat, der nur funktioniert, wenn die App geöffnet ist?
Suchst du noch Mitstreiter? usw.

In jedem Falle brauchst du aber einen Server.


----------



## Leschge (14. Okt 2017)

Vielen Dank,
es sollte schon eine Art Echtzeit Messenger werden, allerdings soll die App bis jetzt nur privat genutzt werden und nicht für die Öffentlichkeit. D.h. der Server sollte mit den Anfragen problemlos zurecht kommen. Nachrichten sollten zwar ankommen, dabei ist es aber nicht sonderlich wichtig, dass sie das innerhalb von 2 Sekunden tun. Sockets benutzte ich nur ungern, da der Messenger flexibel auch mal unterwegs *kurz* benutzt werden soll und das Internet eben häufig abbricht oder sich mal ändert. Er wird nicht dafür konzipiert, um 10 Stunden am Tag dauerhaft Nachrichten und Katzenbilder zu verschicken 
Über die Pushbenachrichtigungen habe ich mir noch keine konkreten Gedanken gemacht, aber regelt die Firebase das nicht über ihre eigene App, sodass es egal ist, ob meine App offen oder geschlossen ist?

Nachrichten werden nur heruntergeladen, wenn die App geöffnet ist. Man wird nur über Push benachrichtigt, dass man neue Nachrichten hat.

-Edit-
Einen oder mehrere Server stellt ein Kollege von mir bereit. D.h. da brauche ich mir keine Sorgen machen. Mitstreiter sind bis jetzt wohl überflüssig, da es vorerst ein Hobbyprojekt ist und ich meist nur am Wochenende Zeit habe ^^


----------

