Je prévois actuellement de faire un projet de jeu de cartes où les clients communiqueront avec le serveur au tour par tour et de manière synchrone en utilisant des messages envoyés via des sockets. Le problème que j'ai est de savoir comment gérer le scénario suivant:
(Le client prend son tour et envoie son action au serveur)
Le client envoie un message indiquant au serveur son coup pour le tour (par exemple joue la carte 5 de sa main qui doit être placée sur la table)
Le serveur reçoit des messages et met à jour l'état du jeu (le serveur conservera tout l'état du jeu).
Le serveur parcourt une liste de clients connectés et envoie un message pour les informer du changement d'état
Les clients sont tous rafraîchis pour afficher l'état
Tout cela est basé sur l'utilisation de TCP, et en le regardant maintenant, cela ressemble un peu au modèle Observer. La raison pour laquelle cela semble être un problème pour moi est que ce message ne semble pas être point à point comme les autres car je veux l'envoyer à tous les clients, et ne semble pas très efficace pour envoyer le même message dans de cette façon.
Je pensais à utiliser la multidiffusion avec UDP, car je pourrais alors envoyer le message à tous les clients, mais cela ne signifierait-il pas que les clients pourraient en théorie se transmettre des messages? Il y a bien sûr l'aspect synchrone également, bien que cela puisse être placé au-dessus de l'UDP, je suppose.
Fondamentalement, je voudrais savoir ce qui serait une bonne pratique car ce projet est vraiment une question d'apprentissage, et même s'il ne sera pas assez important pour rencontrer des problèmes de performance, j'aimerais les considérer de toute façon.
Cependant, veuillez noter que je ne suis pas intéressé à utiliser un middleware orienté message comme solution (j'ai de l'expérience avec MOM et je suis intéressé à envisager d'autres options à l'exclusion de MOM si les sockets TCP sont une mauvaise idée!).