Salut ici,
Je vous explique mon problème :
J'ai un jeu multijoueur qui utilise une application java comme serveur. Donc, à chaque fois qu'un joueur se connecte, un nouveau thread est créé.
Le problème, c'est que quand j'arrive vers 30-40 joueurs, de temps en temps le serveur n'envoie plus rien à personne pendant environs 10 secondes. Des gros coup de lag en gros ^^
Ca c'est quand je n'utilise pas le mot clef "synchronized".
Le problème, c'est quand je met synchronized devant toutes mes méthodes le serveur plante (sans message d'erreur) ou bout de 4-5 joueurs.
C'est un petit jeu de plateforme multijoueur en temps réel que vous pouvez trouvez ici : http://www.extinction.fr/aaaaah/. C'est assez dynamique et le serveur reçoit pas mal d'informations par secondes.
Je n'arrive pas à trouver où ça coince car le serveur ne m'envoie pas de message d'erreur.
J'ai l'impression que ça vas pas lorsque le serveur doit redistribuer un message à plusieurs client. Il procède de cette façon :
Cette méthode se trouve dans la classe principale, LS_JOUEUR correspondant à un ArrayList contenant le thread de chaque joueur. Cet objet est le seul que les threads se "partage".
Dans le thread de chaque joueur se trouve cette méthode, qui est appelée plus haut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void Envoie(ArrayList<Joueur> LS_JOUEUR, String MESSAGE) { int NbJoueur = LS_JOUEUR.size(); for (int i = 0; i < NbJoueur; i++) { LS_JOUEUR.get(i).Envoie(MESSAGE); } }
Si quelqu'un peut m'indiquer comment placer mes mot clef synchronized, ça m'intéresse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void Envoie(String MESSAGE) { Socket_Out.print(MESSAGE + '\u0000'); Socket_Out.flush(); }![]()
Partager