Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Pokerprojekt realisierung

  Alt 29. Mär 2007, 20:37
Zitat von .chicken:
Per Timer rufen die Clients dann jede Sekunde oder so, die Werte die sie zum Zeichnen brauchen ab.
(Das würd ich mit Textnachrichten oder so realisiern!?)

Hat zur Folge, dass die Clients die Klassen nicht direkt kennen, sondern nur die Infos über den Server abrufen können (Server hat die Klassen in uses und Clients den Server).

Ist das richtig gedacht so? Wird das funktioniern oder ist es sinnvoller das anders zu machen?
Ich würde sagen, dass Du hier etwas anders machen kannst/solltest. So klingt es schon so, als ob auch Du mit dem Weg nicht 100%ig zufrieden bist (jeder Sekunde oder so).
Das häufige/ständige Abfragen von Werten wird als Polling bezeichnet, Du schaust ständig nach ob sich etwas geändert hat. Dabei gibt es zwei Probleme, ändert sich etwas, bekommst Du es vielleicht erst später mit (hier können 0.9999999 Sek. vergehen, bevor Du die Änderung bemerkst). Das andere Problem ist, dass Du häufig völlig umsonst nachfragst, weil sich noch überhaupt nichts geändert hat. Nicht zuletzt kann es natürlich auch zu einer gewissen Last führen, wenn alle gleichzeitig anfragen.

Der deutlich intuitivere Weg ist es, dass Du die Clienten über Änderungen Informierst. Der Server erfährt immer von jeder Änderung und das sofort. Hat sich etwas geändert, kannst Du nun alle Clienten über die Änderung informieren und dabei selbst steuern, wer wann benachrichtigt wird (ob alle nacheinander oder ein paar/alle parallel).
Somit erfahren alle Clienten schnellst möglich von Veränderungen und nur genau dann, wenn es wirklich Veränderungen gab.

Ich denke Dein vorgeschlagener Weg ist einfacher zu programmieren, aber da solltest Du selbst den jeweiligen Aufwand abschätzen. An sich denke ich, dass Du den Weg wie gesagt selbst nicht 100%ig richtig findest (kann mich da aber auch irren). An sich wird die ereignisbasierte Benachrichtigung aber häufiger begegnen, da man hier viele Ressourcen spart und sich über Dinge wie Update-Intervalle keine Gedanken machen muss (reicht eine Sekunde, erzeugt eine halbe Sekunde zu viel Last, ..).

Die Frage ist natürlich, wie benachrichtigt man alle Clienten? Dazu möchte ich einfach mal auf folgenden Thread verweisen http://www.delphipraxis.net/internal...=657757#657757
Darin wird kurz das Prinzip von Ereignissen in einer Liste (auch als Observer-Pattern bekannt) behandelt. Dieser Weg beschreibt dabei, wie man ein Ereigniss beobachtet (sich über den Eintritt benachrichtigen lässt). Das ganze kannst Du dabei auch auf das Netzwerk übertragen.
Schließt sich ein Client einem Netzwerk-Spiel an, verbindet er sich einfach mit dem Server. Dabei wird dem Server einfach mitgeteilt, dass ein neuer Spieler hinzu gekommen ist und über alle Änderungen benachrichtigt werden möchte. Beim Verbinden erhält der Server dabei automatisch alle Daten vom Clienten (IP-Adresse und Port). Der Rest (Kommunikation über Textnachrichten) kann dabei erhalten bleiben. Bekommt der Server eine Änderung mit, so schickt er einfach eine Nachricht an alle ihm bekannten Clienten.

Hoffe das hilft weiter (und klingt nicht zu kompliziert, ist es nämlich gar nicht). Schau einfach mal, wie Du selbst den Aufwand einschätzt und frag ggf. natürlich gerne wieder nach!

Gruß Der Unwissende
  Mit Zitat antworten Zitat