"Echtzeit" Multiplayer-Game im Browser, die Technik dahinter

M80331

Lieutenant
Registriert
Juli 2009
Beiträge
736
Hallo Forum,

folgende Geschichte trug sich gestern zu:
Ein Bakannter meinte in geselliger Runde kurz und bündig: "gute alte simple Games sind am aussterben, wäre das schön wenn man die noch online gegeneinander zocken könnte".

Und schon war ich, als Programmierer in der Runde, auserkoren sich daran zu versuchen. Also dachte ich mir, hab schon einiges geproggt, warum nicht mal an sowas versuchen.

Eine wichtige Sache noch zum klarstellen:
mir gehts jetzt um meinen Ehrgeiz die Sache umzusetzen, nicht darum dass es womöglich abertausende da draußen gibt die das können, oder unzählige Seiten wo man Games zocken kann.

---

Zu meiner Person:
ich kann einiges von Turbo Pascal über C/C++ und Delphi bis zu C#,
ich kann HTML/JS und PHP/MySQL, ich weiß grob wie AJAX funzt,
ich kann in Java nur kleine PC Progs, aber kein Plan von Applets,
ich weiß was Silverlight und Flash sind, hab aber nie was darin geproggt,

aber ich weiß mein Ziel:
ein billiges gutes altes XXO, Schiffe versenken, Vier gewinnt, irgendwas in der Art zu proggen, dass ich online gegen Freunde spielen kann.

Die genannten Games sollen hier als Beispiel dienen, es könnten auch andere sein; wenn ich erstmal die technische Basis kapiert habe, komme ich allein klar.

---

Nun also die eigentliche Frage:

welche Sprache nehme ich da am dümmsten, das allseits beliebte Flash, oder Silverlight, oder Java, oder reicht AJAX, gibt es sonst irgend was, was sich eignet?

Es geht mir also um die Technik dahinter, sprich:

  • Spieler 1 darf sein Zug machen, ergo: klickt irgendwas
  • Spieler 2 sieht das Ergebnis, reagiert, ergo: macht seinen Zug
  • das ganze so hin und her, Siegbedingung proggen wird nicht das Prob
  • wenn die Spielzüge auf einem Server zwischengespeichert werden müßten, so ist das auch nicht das Problem, Server hab ich

Aber wie macht man das nun, S1 klickt, S2 sieht es, S2 klickt, S1 sieht es.

Und wenn das Browserbasiert nicht geht, nehme ich auch Anregungen entgegeg zu Lösungen, wo der Spieler eben vorher ein Client Programm runterladen und starten muss, aber Browser wär schon wünschenswert.

---

Abschließende Bemerkung:

Ich erwarte hier weder "frag google", noch erwarte ich fertig gecodete Lösungen.

Wenn mir jemand empfiehlt "guck genau das bei youtube" oder "lies dieses Buch" oder "schau dir jenes CBT an", bin ich auch nicht abgeneigt, auf englisch wär auch kein Problem, im Gegenteil es geht mir um Anregungen, den kleinen Wink in die richtige Richtung, so es sie gibt.

Sollte ich mich unverständlich ausgedrückt haben, auch Gegenfragen sind erwünscht. ;)
 
Könnteste mit Ajax und ner DB machen. Dann jede Sekunde (oder beliebiger Abstand) eine Ajax-Abfrage schicken. (Bezogen auf Schiffeversenken)

MfG
 
Zuletzt bearbeitet:
Also am sinnvollsten (mache einiges in der Ecke) ist es einen "dummen" Client zu programmieren und eine Serversoftware, die alles verwaltet.
Dabei kann der Client in long-polling Ajax, Websockets oder noch besser mit normalen Sockets (Flash) arbeiten*.

Es funktioniert in etwas so:
Der Client ist dumm, er dient nur dazu dem Spieler die aktuelle "Welt" zu präsentieren, Kommandos werden an den Server gesendet, dieser prüft dann alles führt die nötigen Änderungen an der Welt durch und schickt allen Clients ein Update der Welt - fertig.

Volles Beispiel (Schiffe versenken):
1. User platzieren Schiffe
2. User1->Server: meine Schiffe liegen so (kann im Kontrollfluss mit 3 getauscht sein)
3. User2->Server: meine Schiffe liegen so (kann im Kontrollfluss mit 2 getauscht sein)
4. Server->Spieler1: du bist am Zug
5. Spieler1->Server: A4
6. Server berechnet Treffer, updatet Welt
7. Server->Spieler1,Spieler2: Spieler2 A4 Treffer
8. Server->Spieler2: du bist am Zug
9. ....

Für den Server würden sich bei dem was du kannst am optimalsten node.js anbieten ;)
Asynchrone Server sind die effizientesten, node.js ist schnell und es lässt sich auch schnell und gut darauf ein Prototyp entwickeln.

Schau dir mal Tutorials wie zum "Smartfox Server" an oder ähnliches an, die zeigen dir schnell wie das Konzept aussieht.

* aber bitte keine HTML Ajax-Polling-Geschichten wie von monstergnom vorgeschlagen, du wirst damit nicht glücklich, es ist weit weg von Echtzeit und die Serverlast ist bei einigen Spielern einfach viel zu hoch, ein Socket-Server hingegen verursacht auch mit hunderten Spielern kaum Last.
 
Zuletzt bearbeitet:
Würde auch eine Client/Server Lösung mittels Sockets vorschlagen, ständiges Polling gegen die DB ist wirklich keine saubere Lösung. Die oben genannte Version mit den "dummen Clients" ist sicherlich nicht allzu schwer umzusetzen und hat nebenbei den Vorteil, dass dein Spiel garantiert cheatfrei sein wird.

edit: es wäre natürlich am schönsten, wenn der Server isoliert läuft und mittels statischer Adresse erreichbar ist, was mit normalem 0815-Webspace nicht funktioniert. Natürlich könne ein Client gleichzeitig als Server fungieren, aber da wird die Sache etwas umständlicher wegen der Verbindung (Firewalls, dynamische Adressen etc. pp.).
 
Zuletzt bearbeitet:
carom schrieb:
Die oben genannte Version mit den "dummen Clients" ist sicherlich nicht allzu schwer umzusetzen und hat nebenbei den Vorteil, dass dein Spiel garantiert cheatfrei sein wird.
genau das ist der Sinn dahinter, gut erkannt ;)
 
carom schrieb:
edit: es wäre natürlich am schönsten, wenn der Server isoliert läuft und mittels statischer Adresse erreichbar ist, was mit normalem 0815-Webspace nicht funktioniert. Natürlich könne ein Client gleichzeitig als Server fungieren, aber da wird die Sache etwas umständlicher wegen der Verbindung (Firewalls, dynamische Adressen etc. pp.).

Wie gesagt, ein separater Server der nicht nur ein PC mit DynDNS ist, wäre auch nicht das Problem. Sollte es je soweit wachsen könnte ich auch einen dedizierten Server hinstellen mit eigener öffentlicher IP und sonst welchen IP/Firewall Kram.

Ihr habt schon alle Recht, durch dieses ständige "AJAX fragt alle paar Sekunden am Server ob es was Neues gibt", genau dadurch hab ich meinen ursprünglichen AJAX Ansatz wieder verworfen.

Werde mir heute mal dieses node.js und Smartfox Server anschauen, könnte womöglich schon der ersehnte Ansatz sein.

Danke erstmal für all die Antworten. :D
 
M80331 schrieb:
Werde mir heute mal dieses node.js und Smartfox Server anschauen, könnte womöglich schon der ersehnte Ansatz sein.

also der Smartfox-Server ist sehr stark auf Flash zugeschnitten, ich habe es nie genutzt (weil mich das Konzept nicht überzeugt) aber es soll wohl möglich sein Multiplayerspiele zu bauen ohne selbst viel Ahnung von Serversoftware zu haben.
Node.js ist eben ein Server-Anwendung geschrieben in JS - und durch die asynchronen Operationen auch sehr JS nah - mit der sich sehr schnell gute Ergebnisse erzielen lassen, selbst wenn die Einarbeitungszeit länger als in den Smartfoxserver ist, würde ich den Weg bevorzugen, denn node.js kannst du später auch wieder für viele andere Sachen nutzen mit dem SmartfoxServer bist du an Flash gebunden.

Als Tipp noch: versuch auch erstmal Spielen bei denen man sich wirklich echt bewegt (MMO, Bombermann, RPG usw) aus dem Weg zu gehen, denn diese sind servertechnisch wirklich sehr komplex umzusetzen.
 
Auf der Smartfox Server HP steht, dass es auch .net, java, fley, air, silverlight, android, sonstwas kann, aber mal abwarten, erstmal das NodeJS testen.

Ich brauch auch erstmal kein Spiel, will ja erstmal das grundlegene hin und her umsetzen.

Ich werd erstmal das Hello World machen und dann vlt. mal probieren einen Chat in Node.js zu machen, ist ja irgendwie auch Interaktion und hin/her Kommunikation.
 
Zurück
Oben