Quindi sto scrivendo un sistema di matchmaking degli scacchi basato su una vista Lobby con sale da gioco, chat generale ecc. Finora ho un prototipo funzionante ma ho grandi dubbi su alcune cose che ho fatto con il server. Scrivere un server della lobby di gioco è per me una nuova esperienza di programmazione e quindi non ho un modello di programmazione chiaro né preciso. Inoltre non sono riuscito a trovare un documento che descriva come dovrebbe funzionare. Ho ordinato "Java Network Programming 3rd edition" da Amazon e sto ancora aspettando la spedizione, spero di trovare alcuni esempi / informazioni utili in questo libro.
Nel frattempo, vorrei raccogliere le tue opinioni e vedere come gestiresti alcune cose in modo da poter imparare a scrivere un server correttamente. Qui ci sono alcune domande dalla parte superiore della mia testa: (potrebbe essere più arriverà)
Innanzitutto, definiamo cosa fa un server. La sua funzionalità principale è quella di mantenere le connessioni TCP con i client, ascoltare gli eventi che generano e inviarli agli altri giocatori. Ma c'è di più?
Dovrei usare un thread per client? In tal caso, 300 client = 300 thread. Non è troppo? Quale hardware è necessario per supportarlo? E quanta larghezza di banda consuma allora una lobby?
Che tipo di struttura di dati dovrebbe essere utilizzata per contenere i socket dei client? Come proteggerlo da modifiche simultanee (es. Un giocatore entra o esiste nella lobby) quando scorre attraverso di esso per inviare un evento senza compromettere il rendimento? ConcurrentHashMap è la risposta corretta qui o ci sono alcune tecniche che dovrei conoscere?
Quando un utente entra nella lobby, quale meccanismo useresti per trasferire a lui lo stato della lobby? E mentre ciò accade, da dove vengono gli altri eventi?