Ist Google App Engine eine gute Plattform für ein Online-MMO?

10

Ich schaue mir einige Ideen an, wie man ein MMORPG-Spiel im kleinen Maßstab auf Java-Basis erstellen kann. Dies ist ein Neben- / Hobbyprojekt, das meinen Lernprozess unterstützt

Ich habe bereits mit GAE gespielt und eine einfache Web-App erstellt. Ich denke darüber nach, diese als Plattform für ein Spiel zu verwenden

Ist das eine gute Idee? Gibt es Spiele, die eine solche Plattform nutzen? Ich kann bisher keine Einschränkungen erkennen, außer dass Google es möglicherweise eher "besitzen" kann als ich

user155695
quelle

Antworten:

3

Dies hängt davon ab, wie viel Latenz / Geschwindigkeit Sie benötigen.

Jede http-Anfrage (an einen dedizierten Server) dauert zwischen 300 und 600 ms. In der App-Engine sieht das eher nach 600-900 ms oder sogar mehr aus (wenn Sie viele Fragen haben). Gleichzeitig muss eine einzelne Verbindung zum GAE weniger als 30 Sekunden dauern, also ...

Das bedeutet nur, dass Sie langsame Abfragen durchführen müssen, was für einige rundenbasierte Spiele und nicht für Echtzeitspiele gut genug sein könnte.

Wenn Sie ein Echtzeitspiel machen möchten, müssen Sie HTTP verlassen und zu TCP oder UDP (insbesondere UDP) wechseln.

Wenn jedoch eine langsame Latenz / Nicht-Echtzeit-Verbindung für Ihr Spiel gut genug ist, skaliert GAE ziemlich billig und löst viele Probleme (keine Beschränkung der Größe der Datenbank, keine Spam-Probleme mit einer großen Anzahl von E-Mails , usw)

DFectuoso
quelle
TCP ist keine Option, wenn Sie Echtzeit möchten.
o0 '.
4
^^^ Allgemeiner Mythos
U62
* Für verschiedene Echtzeitwerte.
DFectuoso
1
TCP verarbeitet Echtzeit problemlos, wenn Sie Ihre Pakete ordnungsgemäß verwalten. Es macht keinen Sinn, innerhalb weniger Millisekunden 10 Pakete an dasselbe Ziel zu senden, wenn Sie sie zusammenfassen können.
Stephen Belanger
@ Stephen: richtig. Mit den richtigen Techniken können Sie Geschwindigkeit und Zuverlässigkeit erreichen, bei denen die einzige Sorge die Verbindungsgeschwindigkeit bleibt.
Moshe Revah
3

Es ist nicht gerade ein MMO, aber hier ist ein Artikel, den ich kürzlich über die Verwendung von App Engine als Game-Server-Backend gelesen habe:

http://gamesfromwithin.com/google-app-engine-as-back-end-for-iphone-apps

Ich habe GAE als Back-End für einige meiner Projekte verwendet, von denen keines ein MMO war, aber ich schätze es auf jeden Fall als starke Webentwicklungsplattform, mit der man im Allgemeinen einfach arbeiten kann und die ausgesprochen billig ist, um mit und zu experimentieren Bootstrap von.

Wie @DFectuoso hervorhebt, treten bei einem Echtzeit-MMO einige Probleme bei der Verwendung eines beliebigen Webservers auf, insbesondere bei App Engine. Ein rundenbasiertes und / oder soziales MMO könnte jedoch möglicherweise App Engine als einziges Back-End verwenden.

Letztendlich hängt es von Ihrer Spielarchitektur ab. Es gibt Strategien, um nahezu in Echtzeit zu arbeiten oder in Echtzeit zu fälschen, wenn der Hauptserver ein Webserver wie App Engine ist:

  • Sie können Peer-to-Peer-Kommunikation in Echtzeit durchführen und den Server nur zu Schlüsselmomenten aktualisieren.
  • Sie könnten versuchen, in Echtzeit mit Strategien wie langem Abfragen zu kommunizieren, das in letzter Zeit auch als "Kometenanforderungen" bezeichnet wird. Dabei stellen Sie Anforderungen an den Webserver und der Server "beendet" die Antwort nie, was zu sehr langen Anforderungen führt / polling, ermöglicht es dem Webserver jedoch, ständig neue Daten zu pushen, sobald diese verfügbar sind. (Eine tiefere Kometenunterstützung ist laut Roadmap eine bevorstehende Funktion in App Engine.)
  • Im Fall von App Engine können Sie auch XMPP / Jabber (ein offenes IM-Protokoll) verwenden, um schnell (nahezu in Echtzeit) mit Ihrem Spieleserver zu kommunizieren. Es ist vielleicht kein großartiger Ort, um ein vollständiges Echtzeitspiel zu erstellen, aber es gibt viele interessante Chat-Bots, die mit der XMPP-Unterstützung von App Engine geschrieben wurden.
WorldMaker
quelle
Dies ist der Issue-Tracker für die Comet-Unterstützung (da ich den Link noch nicht in den eigentlichen Beitrag einbetten konnte - ich brauche anscheinend mehr Reputationspunkte): code.google.com/p/googleappengine/issues/detail?id=377
WorldMaker