2010-03-05 6 views
2

S'il vous plaît arrêtez-moi avant que je fasse une grosse erreur :) - J'essaie d'écrire un jeu-questionnaire multi-joueurs simple pour les téléphones Android pour obtenir de l'expérience en écrivant le code du serveur.Contrôle d'intégrité - Un serveur de jeu multijoueur en Java utilisant TCP (ServerSocket) est-il viable?

Je n'ai jamais écrit de code serveur auparavant. J'ai l'expérience de Java et l'utilisation de Sockets me semble l'option la plus simple. Un jeu par navigateur signifierait l'indépendance de la plate-forme, mais je ne sais pas comment contourner le manque de poussée en utilisant Http du serveur vers le navigateur.

Voici comment le jeu se déroulerait, il devrait donner une idée de ce dont j'ai besoin;

Un utilisateur démarre l'application et se connecte en utilisant un socket à mon serveur. Le serveur attend 4 joueurs, les regroupe dans un jeu puis diffuse la première question du quiz. Une fois que tous les joueurs ont soumis leurs réponses (5 secondes se sont écoulées), le serveur distribue la réponse correcte à la question suivante.

C'est la base, vous pouvez probablement remplir les détails les plus fins, c'est juste un projet de jouet vraiment.

MA QUESTION EST;

Quels sont les pièges de l'utilisation d'un JAR simple sur le serveur pour gérer les demandes des clients? Le code serveur enregistre un ServerSocket lors de sa première exécution et crée un pool de threads pour gérer les connexions client entrantes. Y at-il une option qui est intrinsèquement meilleure pour la connexion à plusieurs clients en temps réel avec une communication bidirectionnelle?

Un exemple simple est dans le SUN tutorials en bas, vous pouvez voir la source pour un serveur multithread, sauf que j'ai un pool de threads initialement pour réduire les frais généraux, mon serveur est en grande partie le même.

Combien de clients pensez-vous que ce système puisse gérer? Si nous avons un nouveau thread pour chaque client, je peux voir que c'est une limite, aussi le nombre de Sockets libres pour les joueurs simultanés. Threads seem to top out at around 6500 avec le nombre de sockets disponibles près de dix fois plus.

Pour être honnête Si mon jeu pouvait gérer 20 joueurs simultanés ce serait bien, mais j'essaie d'apprendre si cette approche est intrinsèquement stupide. Tous les articles sur la mise en place d'un serveur d'échecs simple ou quelque chose serait incroyable, je ne trouve tout simplement pas.

Merci à l'avance les oh, bien informés

Gav

+0

Je viens de tomber sur ce projet open source ce matin, il pourrait contenir du code qui mérite d'être consulté: http://arianne.sourceforge.net/ – Upgradingdave

+0

Vous pouvez également jeter un oeil à Apache MINA. Il se peut que ce soit trop compliqué, mais cela rend l'écriture d'un serveur assez simple et prend en charge la plupart des choses de mise en réseau, utilise des E/S non bloquantes et n'a donc pas besoin d'un thread pour chaque connexion. –

+0

Je suis dans le même scénario: vouloir construire un client pour un projet de passe-temps et aussi avoir un manque de matériel décent. Si quelqu'un peut donner un bon matériel avec un aperçu de la façon de créer un client Java et un jeu multijoueur, il serait le bienvenu. La meilleure ressource que j'ai trouvé jusqu'ici a été un blog: http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part -1/Il utilise node.js mais il donne une introduction à TCP vs UDP et aux serveurs socket. Y a-t-il un manuel quelque part? – JPK

Répondre

2

Vous pouvez gérer 20 lecteurs simultanés avec un serveur Java. La meilleure chose à faire est d'éviter toute sorte d'interface utilisateur bloquante comme si c'était le diable lui-même.En prime, si vous vous en tenez à des E/S non bloquantes, vous pouvez probablement faire le tout en un seul thread.

La mise à l'échelle de plus de 100 utilisateurs peut nécessiter l'accès à plusieurs processus/serveurs, en fonction de la charge que chaque utilisateur place sur votre client.

+0

Nous avions des serveurs de poker fonctionnant avec plus de 10k joueurs sur une seule machine (split sur 2 instances de serveur). Donc 100 joueurs n'est pas un nombre particulièrement élevé. – Nuoji

0

Vous pouvez contourner le problème « push du serveur au client via HTTP » en utilisant la méthode Long Poll. Toutefois, l'utilisation de sockets TCP pour cela fonctionnera également. Beaucoup de jeux ont été écrits de cette façon.

Questions connexes