Então, eu estou escrevendo um sistema de partidas de xadrez baseado em uma visualização do Lobby com salas de jogos, bate-papo geral etc. Até agora, tenho um protótipo funcional, mas tenho grandes dúvidas sobre algumas coisas que fiz com o servidor. Escrever um servidor de lobby de jogos é uma nova experiência de programação para mim e, portanto, não tenho um modelo de programação claro nem preciso. Também não consegui encontrar um documento que descreva como deve funcionar. Encomendei "Java Network Programming 3rd edition" da Amazon e ainda aguardo o envio. Espero encontrar alguns exemplos / informações úteis neste livro.
Enquanto isso, gostaria de reunir suas opiniões e ver como você lida com algumas coisas para que eu possa aprender a escrever um servidor corretamente. Aqui estão algumas perguntas em cima da minha cabeça: (pode haver mais por vir)
Primeiro, vamos definir o que um servidor faz. Sua principal funcionalidade é manter conexões TCP com os clientes, ouvir os eventos que eles geram e enviá-los para os outros players. Mas há mais do que isso?
Devo usar um segmento por cliente? Nesse caso, 300 clientes = 300 threads. Isso não é demais? Que hardware é necessário para suportar isso? E quanta largura de banda um lobby consome então aprox?
Que tipo de estrutura de dados deve ser usada para armazenar os soquetes dos clientes? Como você o protege de modificações simultâneas (por exemplo, um jogador entra ou existe no lobby) ao iterá-lo para despachar um evento sem prejudicar o rendimento? ConcurrentHashMap é a resposta correta aqui, ou existem algumas técnicas que eu deveria conhecer?
Quando um usuário entra no lobby, que mecanismo você usaria para transferir o estado do lobby para ele? E enquanto isso está acontecendo, onde os outros eventos surgem?