Krautkanal.com

Veröffentlicht am 2015-10-16 16:41:47 in /prog/

/prog/ 7941: CrossPlatform App

iamgarth Avatar
iamgarth:#7941

Hallo Berndi,

ich hätte eine nette Spielidee die ich umsetzen werde. Nur stellen sich leider in der Vorbereitung einige Probleme in den Weg.
Das Spiel soll nur auf Smartphones laufen (möglichst alle Modelle/Betriebssysteme), da Desktop-PCs die Sensoren dafür fehlen.
Es ist ein Multiplayer Spiel und wird mit einem/mehreren Server/n kommunizieren. Im bestschlimmsten Fall, also wenn die App gut ankommt, rechne ich mit sehr vielen Spielern. Ich weis noch nicht wie ich das in der Architektur berücksichtigen soll, wenn extrem viele Anfragen auf den Server einschießen und inwiefern die Performance der App dafür wichtig ist. Stichworte LoadBalancer, Asyn (Daten erst sammeln, dann irgendwann einmalig übermitteln)

HTML5 + JS (Server: C mit SQLite/MySQL)
Vorteile:
- Kann Bernd alles ziemlich gut
- Läuft überall; Android, iOS, WindowsPhone
- Teilweise gute Frameworks auf dem Markt
Nachteile:
- Läuft nicht so flüssig auf Smartphones bzw. abhängig von Leistung (Viel JS und die CPU kombt nicht hinterher, gerade bei Animationen oder verzögerte/keine Touchreaktion; siehe responsive Layouts von Webseiten)

Android mit LibGDX
Vorteile:
- Läuft flüssig (Animationen, Touch-Reaktionen, ...)
Nachteile:
- Muss Bernd erst über einige Wochen erlernen
- iOS + WindowsPhone Spieler erstmal ausgesperrt (späterer verzögerte Möglichkeit für den Einstieg in das Spiel teilweise unfair)
- Enormer Aufwand alles zu portieren da aneignen von iOS (Objective-C) und WindowsPhone API


Schwierig, schwierig.
Wie würde Bernd handeln?
Erfahrungen mit so einer Situation?


Danke für deine Hilfe, Berndi.

Liebe Grüße :3
Dein Bernd

langate Avatar
langate:#7942

>HTML5 + JS (Server: C mit SQLite/MySQL)
Das willst du doch nicht ernsthaft in C mit irgendwelchen Strings herumkrebsen, besonders nicht bei einer Webanwendung. Nimm doch lieber sowas wie Java, Scala, Python, C# oder zumindest C++ für deinen Server.

SQLite als Datenbank einer Webanwendung ist auch nicht wirklich empfehlenswert, dann eher MySQL. SQLite kann z.B. keinen simultanen Zugriff und blockiert bei jeder Anfrage die ganze Date. Moderne SQL-Features und Skalierbarkeit wie bei einem "richtigen" DBMS hast du damit auch nicht.

anass_hassouni Avatar
anass_hassouni:#7943

>>7942
Danke für deinen Beitrag.
Ich dachte an C, weil Linux und maschinennah und deshalb sehr schnell in der Ausführung/Bearbeitung. C++ ja auch, aber da müsste ich mich erst einarbeiten.

MySQL wäre auch meine erste Wahl, aber was verstehst du unter einem "richtigen" DBMS?

bluesix Avatar
bluesix:#7945

>>7943
SQLite: Einfach nur eine Library die mit SQL-Abfragen eine Datei bearbeiten kann.
Richtiges DBMS: Ein Datenbank-Server der als eigener Prozess läuft, mit Nutzer-und Berechtigungsmanagement, simultanem Zugriff, anständiger Join-Performance, Clustering, und dem ganzen Zeug dass du eigentlich haben willst wenn du einen Server betreibst und skalierbar bleiben willst.

>Ich dachte an C, weil Linux und maschinennah und deshalb sehr schnell in der Ausführung/Bearbeitung. C++ ja auch, aber da müsste ich mich erst einarbeiten.
Sieh erst mal zu dass du einen funktionierenden Prototyp hast, Performance ist ein Luxusproblem um das du dich später kümmern kannst. Skalierbarkeit an sich ist wichtiger als rohe Performance, damit nicht alles exponentiell langsamer wird bei steigender Last.

Ob du jetzt durch Java 200% langsamer bist als das Optimum, ist da eigentlich völlig egal, nimm einfach einen größeren Server wenn du in der glücklichen Situation bist dass du die Nutzerzahlen tatsächlich bekommst. Ich würde eigentlich sogar fast sagen scheiß erst mal komplett auf Performance und bei einen Prototypen in Python. Wenn du dann weißt was du eigentlich brauchst und wo die Probleme sind kannst du einen sauberen Rewrite in einer schnelleren Sprache machen. Die Chancen sind vermutlich ohnehin groß dass die Datenbank am Ende dein Flaschenhals sein wird.

murrayswift Avatar
murrayswift:#7948

OP, es gibt seit einiger Zeit "React Native", womit du in JS native Anwendungen für iOS/Android schreiben kannst. Wie gut das ist, weiß ich nicht - ist aber von Facebook, vielleicht lohnt sich das Anschauen.

cheezonbread Avatar
cheezonbread:#7949

>>7945
Flaschenhals vermute ich eher die Request-Menge an den Server (Beispielsweise: 1 Mio. Anfragen in 1 Minute, welche dann noch beantwortet werden müssen), was ich deshalb im Vorfeld verhindern will, dass so ein Server eine Art DDoS abbekommt und dann gar nichts mehr geht. Das wär für die Spieler und App katastrophal und würde diese im Keim ersticken. Erfolgshindernis garantiert.
Selbstverständlich bau ich einen Prototyp, um mit diesem ausgiebige Tests durchführen zu können. Aber in Sachen Skalierbarkeit habe ich kaum Erfahrungen, deshalb die Sorge.
Auch wäre hier interessant, ob eine native App, solche Server-Requests besser/stabiler handhaben kann, als eine z.B. mit PhoneGap geschriebene CrossPlatform App, welche dann alles über XHR regelt.

>>7948
Waow. Vielen Dank für die Info, Bernd! Aufjedenfall sehr interessant! Werde ich mir anschauen!

itskawsar Avatar
itskawsar:#7950

>>7949
Schau dir in dem Fall eventuell auch mal Node.JS an, das soll gerade in dem Spezialfall gut skalieren. Du kannst Node.JS übrigens anscheinend auch mit TypeScript verwenden falls dir das ansonsten zu krebsig ist [1].

[1] Auf eigene Gefahr, hab TypeScript noch nie zusammen mit Node ausprobiert und kann dir nicht sagen ob das praktikabel ist, nur gehört dass es gehen würde.

vicivadeline Avatar
vicivadeline:#7951

>>7949
>Flaschenhals vermute ich eher die Request-Menge an den Server (Beispielsweise: 1 Mio. Anfragen in 1 Minute, welche dann noch beantwortet werden müssen)
Also wenn du unter Java einen Server mit netty schreibst, hast du eigentlich ziemliche (low-level) Freiheiten beim (asynchronen) Requesthandling, und solltest sehr gut skalieren können.
Bringt sogar nativen Epoll-Support mit.
Aber wenn Bernd in C so bewandert ist, kann er es natürlich auch direkt in C machen.

davidtoltesy Avatar
davidtoltesy:#7953

und dann SQL einbetten oder wie?

Ich nehm den Ramjet zur Bushaltestelle, das ist viel schneller als zu Fuß!

kiwiupover Avatar
kiwiupover:#8150

Schau dir auf jeden Fall mal Unity an. Bernd war immer skeptisch aber hat es neulich mal ausprobiert und es ist tatsächlich ziemlich gut.

alexcican Avatar
alexcican:#8158

>node.js
>sockets auf smartphone
Mach REST, Junge. Alles andere macht Akku in einer Stunde leer.

likewings Avatar
likewings:#8198

Was taugt PhoneGap?
Dieser Bernd wird sich bald beruflich damit auseiandersetzen müssen.

Neuste Fäden in diesem Brett: