Attualmente sto progettando di realizzare un progetto di gioco di carte in cui i client comunicheranno con il server in modo a turni e sincrono utilizzando i messaggi inviati tramite socket. Il problema che ho è come gestire il seguente scenario:
(Il client fa il turno e invia la sua azione al server)
Il client invia un messaggio dicendo al server la sua mossa per il turno (ad esempio, gioca la carta 5 dalla sua mano che deve essere posizionata sul tavolo)
Il server riceve messaggi e aggiorna lo stato del gioco (il server manterrà tutto lo stato del gioco).
Il server scorre attraverso un elenco di client connessi e invia un messaggio per informarne il cambio di stato
Tutti i client si aggiornano per visualizzare lo stato
Tutto questo si basa sull'uso di TCP, e guardandolo ora sembra un po 'come il modello Observer. Il motivo per cui questo sembra essere un problema per me è che questo messaggio non sembra essere punto-punto come gli altri come voglio inviarlo a tutti i clienti e non sembra molto efficiente inviare lo stesso messaggio in quel modo.
Stavo pensando di utilizzare il multicasting con UDP, in quanto avrei potuto inviare il messaggio a tutti i client, tuttavia ciò non significherebbe che i client sarebbero in teoria in grado di scambiarsi messaggi? C'è ovviamente anche l'aspetto sincrono, anche se questo potrebbe essere messo in cima all'UDP, credo.
Fondamentalmente, vorrei sapere quali sarebbero le buone pratiche in quanto questo progetto riguarda davvero l'apprendimento, e anche se non sarà abbastanza grande per incontrare problemi di prestazioni da questo, vorrei considerarli comunque.
Tuttavia, tieni presente che non sono interessato a utilizzare il middleware orientato ai messaggi come soluzione (ho esperienza con l'utilizzo di MOM e sono interessato a considerare altre opzioni che escludono MOM se i socket TCP sono una cattiva idea!).