Einzelnen Beitrag anzeigen

Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Überarbeitung Netzwerkspiel

  Alt 9. Mär 2007, 14:26
Hi,
Ich habe zusammen mit ein paar Freunden ein Netzwerk Spiel geschrieben, was jetzt aber so verbuggt ist, dass wir es gerne noch einmal komplett neu entwickeln wollen. Knackpunkt ist hier jetzt erstmal die Kommunikation von Server und Clients. Bisher läuft das ganze so ab, das es einen Spielcounter gibt, anhand dessen Client und Server abgleichen können, ob es veränderungen gab.
Anfangs ist dieser Spielcounter 0 und bei jedem Zug, den ein Spieler ausführt wird er um eins erhöht.

Jeder Client fragt nun kontinuirlich nach ob es etwas neues gibt. Dazu schickt er seinen Spielcounter an den Server, dieser gleicht ihn mit dem aktuellen ab und schickt entweder zurück, dass es nichts neues gibt, oder aber die Veränderungen und den neuen Spielcounter.

Soweit das grundlegende Konzept, was auch funktioniert. Da wir das ganze bei der Neu entwicklung natürlich besser machen wollen, stellt sich hier die Frage, wie kann man den Overhead möglichst gering halten kann. 90% der Zeit wird nur sinnlos der Spielcounter geschickt und es kommt die Antwort das sich nichts getan hat. Es gibt bei dem Spiel halt sehr viel Freilauf, indem einfach nichts passiert (Vergleichbar mit Schach), trotzdem soll aber jeder Client so schnell wie möglich über Veränderungen informiert werden.
Es fehlt halt irgendwie die Möglichkeit vom Server aus Nachrichten an die Clients zu schicken.

Überlegt hatten wir jetzt schon, ob jeder Client auch einen ServerSocket aufmachen soll, damit der Server dann aktiv die Kommunikation anstoßen kann. Allerdings muss dann auf Client Seite auch eine Portfreigabe gegeben sein, was nicht so schön ist. Ausserdem muss der Server dann jede Menge Sockets und dementsprechend viele Ports verwalten. Auch sehr unschön.

Bisher hatten wir das ganze mit TClientsocket und TServerSocket gelöst. Hier haben wir dann per SendText die Informationen übermittelt.


Habt ihr vielleicht Tipps wie sich soetwas am effizientesten Lösen lässt? Ich bin mir sicher das diese Problemstellung öfters schon aufgetreten ist, ich konnte aber leider nichts passend finden. Sry dafür.


vielen dank aber auf jeden Fall schonmal

mfg
Antigo
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat