Ich plane derzeit ein Kartenspielprojekt, bei dem die Clients über Nachrichten, die über Sockets gesendet werden, rundenbasiert und synchron mit dem Server kommunizieren. Das Problem, das ich habe, ist, wie ich mit dem folgenden Szenario umgehen soll:
(Der Client ist an der Reihe und sendet seine Aktion an den Server.)
Der Client sendet eine Nachricht, in der er dem Server seinen Zug für den Zug mitteilt (z. B. spielt er die Karte 5 aus seiner Hand, die auf den Tisch gelegt werden muss).
Der Server empfängt Nachrichten und aktualisiert den Spielstatus (der Server hält den gesamten Spielstatus).
Der Server durchläuft eine Liste der verbundenen Clients und sendet eine Nachricht, um sie über Statusänderungen zu informieren
Alle Clients werden aktualisiert, um den Status anzuzeigen
Dies alles basiert auf der Verwendung von TCP, und wenn man es jetzt betrachtet, scheint es ein bisschen wie das Observer-Muster zu sein. Der Grund, warum dies für mich ein Problem zu sein scheint, ist, dass diese Nachricht nicht wie die anderen Punkt-zu-Punkt-Nachrichten zu sein scheint, da ich sie an alle Clients senden möchte, und dass das Senden derselben Nachricht nicht sehr effizient ist dieser Weg.
Ich habe darüber nachgedacht, Multicasting mit UDP zu verwenden, da ich dann die Nachricht an alle Clients senden könnte. Würde dies jedoch nicht bedeuten, dass die Clients theoretisch in der Lage wären, sich gegenseitig Nachrichten zu senden? Es gibt natürlich auch den synchronen Aspekt, obwohl dies, denke ich, über das UDP gestellt werden könnte.
Grundsätzlich würde ich gerne wissen, was eine gute Praxis wäre, da es bei diesem Projekt wirklich nur ums Lernen geht, und obwohl es nicht groß genug ist, um auf Leistungsprobleme zu stoßen, möchte ich sie trotzdem in Betracht ziehen.
Bitte beachten Sie jedoch, dass ich nicht daran interessiert bin, nachrichtenorientierte Middleware als Lösung zu verwenden (ich habe Erfahrung mit der Verwendung von MOM und bin daran interessiert, andere Optionen außer MOM in Betracht zu ziehen, wenn TCP-Sockets eine schlechte Idee sind!).