Así que estoy escribiendo un sistema de emparejamiento de ajedrez basado en una vista de Lobby con salas de juego, chat general, etc. Hasta ahora tengo un prototipo que funciona pero tengo grandes dudas sobre algunas cosas que hice con el servidor. Escribir un servidor de lobby de juegos es una nueva experiencia de programación para mí y, por lo tanto, no tengo un modelo de programación claro ni preciso. Tampoco pude encontrar un documento que describiera cómo debería funcionar. Pedí "Java Network Programming 3rd edition" de Amazon y todavía estoy esperando el envío, espero encontrar algunos ejemplos / información útiles en este libro.
Mientras tanto, me gustaría reunir sus opiniones y ver cómo manejaría algunas cosas para que pueda aprender a escribir un servidor correctamente. Aquí hay algunas preguntas fuera de mi cabeza: (puede haber más)
Primero, definamos lo que hace un servidor. Su funcionalidad principal es mantener conexiones TCP con clientes, escuchar los eventos que generan y enviarlos a los otros jugadores. ¿Pero hay algo más que eso?
¿Debo usar un hilo por cliente? Si es así, 300 clientes = 300 hilos. ¿No es eso demasiado? ¿Qué hardware se necesita para soportar eso? ¿Y cuánto ancho de banda consume un lobby, aproximadamente?
¿Qué tipo de estructura de datos se debe utilizar para mantener los sockets de los clientes? ¿Cómo lo protege de modificaciones concurrentes (p. Ej., Un jugador entra o existe en el lobby) cuando lo itera para despachar un evento sin afectar el rendimiento? ¿Es ConcurrentHashMap la respuesta correcta aquí, o hay algunas técnicas que debería saber?
Cuando un usuario ingresa al lobby, ¿qué mecanismo usarías para transferirle el estado del lobby? Y mientras esto sucede, ¿dónde surgen los otros eventos?