Android Datenaustausch WLAN - Was ist am Besten?

JavaTobi

Mitglied
Hallo alle zusammen,
dieses Mal habe ich hoffentlich eine einfachere Frage.
Für mein Androidprojekt möchte ich ganz einfache (POJO) Java Objekte zwischen zwei Handys versenden. Das Ziel ist, die beiden Geräte über WLAN (Tethering) zu verbinden und anschließend Daten wie:
Code:
Objekt{
    int id;
    String name;
    float positionX;
    ...
}
zu übertragen. Die Übertragung sollte möglichst schnell geschehen, da es sich um ein "Netzwerkspiel" handelt. Gleichwohl gibt es nur einen Server und mehrere Clients. Also halte ich eine P2P Verbindung für ungünstig, oder?
Aus meinen Java-Erfahrungen würde ich vielleicht eine einfache Socket Verbindung aufbauen aber da ich hier Android nutze dachte ich, es gibt hier vielleicht bessere Möglichkeiten oder ein Android Framework.
Hat irgendwer Erfahrungen hierbei? Was könnt ihr mir empfehlen?
Vielen Dank,
Tobias
 
Zuletzt bearbeitet:

schlingel

Gesperrter Benutzer
Fahr über einen Server. Die Android-Geräte selbst wissen ja nicht welche IPs sie haben und so spielt der Server als Knotenpunkt Vermittlung.

Das erleichtert die Implementierung ungemein und du kannst gleichzeitig am Server überwachen das eh niemand schummelt.

Zur Technologie: Je nach dem was du implementierst musst du dir überlegen ob zustandslose oder zustandsbehaftete Kommunikation angebracht ist. Für ersteres eignet sich REST ganz gut. Das ist zwar schwerfälliger als UDP hat aber den großten Vorteil, dass es leicht debugged werden kann. Für zustandsbehaftete Kommunikation kannst du zu Remoting greifen, hier im Forum hat jemand ein Framework dafür geschrieben das es auch für Android gibt. Das schaut vielversprechend aus.

Für REST gibt's 1000 Frameworks die dir das Parsen abnehmen. Ich habe angefangen ein Framework zu schreiben, das vor allem die Art wie kommuniziert wird auf den Android Lifecycle abbildet. Das heißt Restl und du kannst hier in meinem Blog ein paar Überlegungen dazu nachlesen. Es ist leider noch nicht fertig und noch nicht einmal in einem Alpha-Stadium aber mithilfe des Blogs solltest du die Architektur halbwegs verstehen und vielleicht kannst du dir ja aus dem Code etwas herausziehen dass du brauchen kannst.
 

JavaTobi

Mitglied
Gute Frage,

nun, ich habe als Ziel mehrere Daten gleichzeitig zu übertragen. Zum einen Spielerdaten (Position der einzelnen Player etc.) die nicht verloren gehen dürfen. Da wäre mir UDP wohl nicht die rechte Lösung. Für später - aber das ist momentan noch weite Zukunft - könnten Sprachchat-Daten übertragen werden, die natürlich auch ggf. verloren gehen können, da wärs nicht soo wild.

Das Spiel selbst wird von einem Server-Handy gestartet, weshalb die Idee eines Netzwerkservers vielleicht ganz gut kommt. Dann müssten alle Handys sich nur zu diesem verbinden und erhalten aktuelle Positions-Daten der anderen Spieler.

Aber ist REST nicht http? Das klingt für mich irgendwie nach viel overhead, dafür, dass die Spielerdaten mehrmals in der Sekunde hin und her geschickt werden müssen. Du schreibst:
"Der Overhead der inkludierten Apache HTTP Client Komponente macht einen Call der signiert wird um den Faktor 4 langsamer."

Immerhin brauche ich einen einfachen, leichten Übertragungswert. Letztlich ist ja alles, was ich übertrage sowas wie:
float positionX = 2.5;
float positionY = 123;
int energie = 100;
Das wars tatsächlich schon. Also... mit Kanonen auf Spatzen? Oder ist das genau dafür gemacht?

Aber ich werde mich da noch weiter reinlesen. Hab schon einmal vielen Dank für den Input.
Tobias
 
Zuletzt bearbeitet:

Neue Themen


Oben