Ich mache gerade ein MMORPG-Spiel, das rundenbasiert ist. Der Client soll auf Android laufen. Jetzt macht mein Freund die Grafik und ich habe die Spielklassen (Spieler, Waffen usw.) gemacht. Wenn der Kampf gestartet wird, können die Klassen durch Schnittstellen manipuliert werden (für meinen Partner ist es so, als würde er mit reinen Schnittstellen arbeiten, er benötigt keinen Zugriff auf die Implementierungsklassen).
Jetzt müssen wir einen Spieleserver einführen, um mehrere Spieler zuzulassen. Und einige sehr wichtige Fragen stellen sich:
1) Soll ich das Spielmodell vollständig auf den Server kopieren und keine Klassen auf dem Client belassen, oder ist es besser, 2 Kopien des Modells zu haben - 1 auf dem Server und 1 auf dem Gerät, und die regelmäßige Synchronisation zwischen diesen abzuschließen?
2) Welche Verbindungsmethode soll zwischen dem Client und dem Server gewählt werden (Client in Sichtweite ist Android Phone)? Was den Server betrifft - ich wende mich Java zu, weil ich einige Erfahrungen damit habe. Aber jetzt lautet die Frage: Ist es besser, Sockets für diese Aufgabe zu verwenden, oder kann ich REST-Services verwenden, oder es ist sogar möglich, sie irgendwie mit einem Java EE-Server zu verbinden, was aus meiner Sicht cool ist, da dadurch viel Programmieraufwand entfällt Komplikation? Obwohl das Spiel im Mehrspielermodus gespielt wird, ist es rundenbasiert, sodass es nicht sehr oft erneuert werden muss.
3) Was ist mit Einfädeln? Sollte jeder Kunde seinen eigenen Thread haben (bei Sockets)?
4) Gibt es Bücher über die Programmierung von REAL MMORPG-Serverspielen?
quelle
Mit Mikolaj einverstanden, kopieren Sie nicht alles. Senden Sie so wenig Daten wie möglich. Sie können auf Client und Server dieselben Klassen haben (die nur das Datenmodell darstellen, nicht andere Assets), diese jedoch nicht über das Netz senden. Sie möchten sie auf dem Server serialisieren und auf dem Client deserialisieren. Der Client sollte nur Befehle an den Server senden.
Sie planen ein rundenbasiertes MMORPG (keine Ahnung, wie das funktionieren würde). Geschwindigkeit ist also kein großes Problem. Sie können jede Art von Service nutzen, REST könnte gut sein, es ist einfach. Normalerweise verwenden MMORPGs UDP (nicht sicher, kleiner, schneller) für Dinge wie Bewegungsaktualisierungen, bei denen ein oder zwei verlorene Pakete keine Rolle spielen, und TCP (sicher, Overhead) für die sichere Kommunikation. Die meisten Spiele verwenden wahrscheinlich ein verschlüsseltes, komprimiertes benutzerdefiniertes Protokoll über UDP und TCP, um es schnell und schwer zu knacken.
Normalerweise möchten Sie einen Thread-Pool haben. Jeder Thread aus dem Pool bedient eine Anforderung und wird dann recycelt. Wenn Sie nicht genügend Threads haben, können Sie in Betracht ziehen, weitere Threads zu blockieren oder zuzuweisen.
Mikolaj hat das schon für dich gegoogelt ...
quelle