Javascript und PHP für Echtzeit-Multiplayer? [geschlossen]

13

Ich frage mich, ob die Kombination von Javascript-Clientseite mit PHP / MySQL-Serverseite eine gute Idee für HTML5-Echtzeit-Multiplayer-Browsergames (im kleinen Maßstab) ist.

Mein technisches Wissen ist sehr begrenzt, und obwohl ich in Zukunft Node.js lernen möchte, ist die Lernkurve im Moment ziemlich groß.

Da ich bereits mit PHP vertraut bin, würde es meiner Meinung nach viel schneller funktionieren.

Die Skala, die ich denke, ist 2-8 Spieler zurzeit. Und versuchen, die Anzahl der Client-Server-Nachrichten so gering wie möglich zu halten.

Die Werte, die ich speichern / verarbeiten möchte, sind:

  • Spielername und ID.
  • X- und Y-Position.
  • Gesundheit.
  • Ausgestattete Gegenstände (maximal 8 Plätze, wahrscheinlich weniger).
  • Aktionen (Gehen, Angreifen, Verwenden usw., jedoch jeweils nur 1 Aktion / Spieler).
  • Aufzählungspunkt X, Y-Koordinaten und Flugbahn.
  • Name der Gilde / des Clans.
  • Und einige grundlegende Chat- / Mailing-Funktionen.

Ich vermute, obwohl es nicht die beste Lösung ist, aber solange ich die Logik klein halte, ist dies vollständig machbar. Habe ich recht?

justanotherhobbyist
quelle
4
Klingt perfekt machbar. Warum probierst du es nicht einfach aus? Im schlimmsten Fall verbringen Sie einige Zeit mit Lernen, im besten Fall bekommen Sie genau das, was Sie wollen.
William Mariager
1
Ja, aber ich stelle mir vor, das würde einige Zeit in Anspruch nehmen und ich mag es nicht, Zeit zu verschwenden. Deshalb habe ich hier gefragt. =)
justanotherhobbyist
8
Wenn Sie etwas lernen, wurde die Zeit nicht verschwendet. ;) Eine Überlegung wert ist, dass Sie beim Wechseln der Sprache Zeit damit verbringen, die neue Sprache zu lernen und gleichzeitig das Networking zu lernen. Dies bedeutet viel mehr Fehlerbehebung, um herauszufinden, wo Sie einen Fehler gemacht haben. Wenn Sie sich an das halten, was Sie wissen, lernen Sie zuerst das Networking und können es dann portieren, wenn sich herausstellt, dass es ineffizient ist. Wenn Sie das nächste Mal eine ähnliche Frage stellen, kennen Sie die richtige Antwort, weil Sie sie getestet haben.
William Mariager
1
Das ist eigentlich ein guter Punkt
Justanotherhobbyist

Antworten:

12

Für ein Echtzeitspiel möchten Sie die Latenz minimieren. Hier sind zwei Tipps, um dies zu erreichen, mit Hinweisen zu PHP und Node:

  1. Verwenden Sie WebSockets. Sie ermöglichen eine schnelle bidirektionale Kommunikation zwischen Server und Client. Die Verwendung von node.js hat den Vorteil, dass Sie an beiden Enden der Pipe dieselbe JavaScript-API verwenden können. Es gibt auch das wunderbare socket.io-Modul für node.js, das Fallback-Technologien für kleinere Browser bereitstellt, die WebSockets nicht unterstützen. Wenn Sie ein bisschen googeln, können Sie anscheinend auch WebSockets von PHP verwenden, wenn Sie wirklich wollen.
  2. Beziehen Sie die Datenbank nicht in zeitkritische Daten wie Koordinaten sich schnell bewegender Objekte ein. Dies bedeutet, dass sie im Speicher bleiben, was für das traditionelle PHP-Nutzungsmodell, dass sie einmal für jede Anfrage an Apache (oder einen beliebigen Webserver) ausgelöst wird, nicht besonders geeignet ist. Sie können Ihre PHP-Server-App jedoch auch als eigenständige Anwendung starten. Ich würde vermuten , dass Node mit seinem V8-Kern schneller sein wird als PHP . Ob das ein Problem ist, hängt davon ab, wie anspruchsvoll Ihr Spiel ist und wie leistungsfähig der Server ist.

Ich selbst finde node.js sehr einfach zu erlernen und da Sie sowieso einiges an JavaScript codieren müssen, würde ich Ihnen empfehlen, es auszuprobieren. Schauen Sie sich zumindest die Tutorials zu socket.io an, um zu sehen, wie einfach es ist, einen Echtzeit-Kommunikationskanal einzurichten.

Tapio
quelle
+1 für Punkt 2. Der größte Fehler, den Sie damit machen können, besteht darin, zu erwarten, dass MySQL-Abfragen bei jedem Ereignis ausgelöst werden. Alles, was Sie tun können, um die Spieldaten von der Festplatte zu verschieben, wird helfen. Ich hatte Erfolg damit, Memcached dafür zu missbrauchen. Es gibt zweifellos andere Wege.
DampeS8N
Ja, ich möchte wirklich Node lernen, aber ich muss es erst noch schaffen, um mit Cmd zu beginnen. Der größte Fehler, den die Entwickler gemacht haben, war, es so schwierig zu machen, sich darauf einzulassen. Mindestens jetzt kommt die Windows-Version mit einem Installer, könnte es versuchen, wenn ich ein gutes Tutorial finde.
Justanotherhobbyist
Der Knoten ist überhaupt nicht schwer zu starten oder zu verwenden. Härter als PHP ist es, ja, aber PHP zahlt einen schrecklichen Preis für seine Bequemlichkeit - das Design, mit dem es standardmäßig überall ohne Konfiguration in Apache eingebettet werden kann, verursacht auch viele Probleme, die PHP absolut und absolut zur schlechtesten Wahl für Sie machen kann für ein Echtzeit-Spiel-Backend sorgen. Für Node, Python, Ruby, Java usw. müssen Sie den App-Server einrichten. Dieses Modell ermöglicht jedoch eine hochskalierbare ereignisgesteuerte In-Memory-Verarbeitung, die in PHP buchstäblich nicht möglich ist.
Sean Middleditch
1

Zusammen mit Tapios Antwort möchte ich vorschlagen, nur (wenn möglich) Benutzereingaben (Klicks und Tastatureingaben) an den Server zu senden und sowohl Server als auch Client das Spiel emulieren zu lassen. Bei jedem N-Häkchen bittet der Client den Server um eine Synchronisierung und der Server antwortet mit allen Informationen, die der Client zum Rendern des Spiels benötigt, z viel.

Natürlich müssen sowohl der Server als auch der Client genau die gleiche Implementierung des Spiels haben, damit dies etwas mehr Arbeit bedeutet. Wenn Sie sowohl auf dem Client als auch auf dem Server perfekte Implementierungen haben, muss der Client seltener synchronisieren.

Dadurch wird das Client / Server-Messaging und die Latenz verringert. Dies würde auch dazu beitragen, Betrug zu verhindern.

Vorausgesetzt, Sie erstellen dieses Spiel in JavaScript, lohnt es sich möglicherweise, das Back-End auch in JavaScript mit NodeJS zu schreiben. Auf diese Weise können Sie die JavaScript-Implementierung Ihres Spiels sowohl für den Server als auch für den Client wiederverwenden.

art0rz
quelle
0

Ich empfehle Nodejs zu lernen. Wenn du jetzt schon Javascript hast, wird es nicht so schwer. Ich habe mit Nodejs schnell ein TRON-Multiplayer-Spiel erstellt und es war mein erster Tag damit. (Oh, und der Client war eine HTML5-Zeichenfläche. Ich habe nur Tasteneingaben gesendet, wie in den anderen Kommentaren erwähnt.)

Schauen Sie sich ein Modul mit dem Namen nowjs an. Viel Glück!

David Da Silva Contín
quelle