J'écris donc un système de mise en relation d'échecs basé sur une vue du lobby avec des salles de jeux, un chat général, etc. Jusqu'à présent, j'ai un prototype qui fonctionne, mais j'ai de gros doutes concernant certaines choses que j'ai faites avec le serveur. Écrire un serveur de lobby de jeu est une nouvelle expérience de programmation pour moi et je n'ai donc pas de modèle de programmation clair ou précis pour cela. Je n'ai pas non plus trouvé de document décrivant comment cela devrait fonctionner. J'ai commandé "Java Network Programming 3rd edition" sur Amazon et j'attends toujours l'expédition, j'espère que je trouverai quelques exemples / informations utiles dans ce livre.
En attendant, j'aimerais recueillir vos opinions et voir comment vous gérer certaines choses afin que je puisse apprendre à écrire correctement un serveur. Voici quelques questions du haut de ma tête: (peut-être que d'autres viendront)
Tout d'abord, définissons ce que fait un serveur. Sa fonctionnalité principale est de maintenir les connexions TCP avec les clients, d'écouter les événements qu'ils génèrent et de les envoyer aux autres joueurs. Mais y a-t-il plus que cela?
Dois-je utiliser un thread par client? Si c'est le cas, 300 clients = 300 threads. N'est-ce pas trop? Quel matériel est nécessaire pour prendre en charge cela? Et combien de bande passante un lobby consomme alors environ?
Quel type de structure de données doit être utilisé pour contenir les sockets des clients? Comment le protégez-vous des modifications simultanées (par exemple, un joueur entre ou existe dans le lobby) lors de son itération pour envoyer un événement sans nuire au débit? ConcurrentHashMap est-il la bonne réponse ici, ou existe-t-il des techniques que je devrais connaître?
Lorsqu'un utilisateur entre dans le lobby, quel mécanisme utiliseriez-vous pour lui transférer l'état du lobby? Et pendant que cela se produit, où se multiplient les autres événements?