Wie programmiere ich am besten den Multiplayer meines Browsergames?

5 Antworten

Bin mit Backendservern nicht sonderlich bewandert, aber mal eine Idee: Du verpackst deine 60 Daten in ein JSON-Objekt.
Oder statt jedem Spieler jedes Mal die Koordinaten aller Spieler zukommen zu lassen, werden bei der Interaktion der Spieler, also wenn es erst darauf an kommt, temporäre Profile der anderen Spieler bei dem Spielenden erstellt. Sprich: Spieler 1 hat die Koordinaten 5, 9, 0. als JSON-Objekt gebündelt, die in die Datenbank kommen und ständig aktualisiert werden, sofern sie sich ändern, wenn nicht, dann nicht. In einem bestimmten Radius wird nun ermittelt, dass sich zwei Spieler nähern und man beginnt die Daten auszutauschen. Es wird registriert, dass Spieler 1 und Spieler 2 aufeinander zu kommen. Spieler 1 bekommt ein temporäres Bild von Spieler 2 und andersrum.
Der Knackpunkt bleibt natürlich noch immer die ständige Aktualisierung der eigenen Daten. Was das angeht, könntest du aber auch ein gröberes Bild erstellen. Statt Position 1.3737, 5.6262, 0, könnte es auch mehr sowas sein wie "1,3737 wird zu 1, 5.6262 zu 6 und 0 bleibt 0". Erst, wenn sich die aufgerundeten Werte ändern, kommt wieder eine Aktualisierung. Mehr fällt mir nicht ein, um die Anfragen zu minimieren. Noch weiss ich, ob das alles so hinhaut.

Du solltest die Koordinatenauslesung und Aktualisierung aber einem Clientserver übergeben und nicht dem im Browser geladenen Skript. Da du ja JavaScript benutzt, bietet sich NodeJs als Serverumgebung an. Dazu benutze RethinkDB, eine Datenbank für Realtime Web.

deine beschreibung ist viel zu ungenau um das beantworten zu können,

du musst dein vorgehen optimieren, alle Koordinaten mit einem rutsch aktualisieren.

du willst dem client doch nicht die arbeit machen lassen?

dann kann jeder seine daten manipulieren?

überdenke dein vorgehen.

du musst immer davon ausgehen das daten die vom client kommen nicht vertrauenswürdig sind, diese gilt es auf Plausibilität und/oder richtigkeit zu überprüfen.


Kiboman  12.02.2017, 17:49

60 mal lesen/s

60 mal schreiben/s

und das für 60 spieler

macht 216.000 zugriffe pro sekunde?

das das wahnsinnig ist sollte verständlich sein.

1

Du kannst gar nicht 60 Requests pro Sekunde schicken, das dauert ewig bis die aus dem Browser rauskommen (es sei denn du bist auf HTTP2 - was ich mal nicht annehme). Die meisten Browser kappen es auf 5 Connections, d.h. du kannst 5 parallel senden und dann erst wieder wenn wenn eine Verbindung geschlossen wurde


Kiboman  13.02.2017, 08:27

deswegen gibt's ja auch einen timeout

0

1. Xmlhttprequest empfängt nichtnur sondern sendet auch. Du kannst dir also jquery sparen

2. Warum denn so umständlich?? Wie wärs denn mit websockets?

Musst wohl einen Server programmieren  zu dem eine Verbindung aufgebaut wird, dieser muss dann einfach die Daten an denn richtigen Client weiterleiten.
Würde es so machen.
Client sendet an den Haupt Server eine Anfrage welche Spieler ein Spiel hosten.
Danach bekommst du eine Antwort zurück vom Server so hast du deine Server Liste.
Zum Hosten muss der Client dann einfach an dem Server senden ich hoste ein Spiel mit diesem Namen und dieser IP Adresse.
Hier muss der Server dann die IP Adresse hinterlegen.
Wenn dann ein zu der Lobby beigetreten wird kann der eine Client seine Objekt liste dem anderen zu senden.
Ist aber natürlich so Cheater anfällig kannst ja noch Server seitig Prüfen ob die Objekte sich zu schnell bewegen. (Kostet dann aber Leistung bei vielen Spielern.)