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".

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);
	}
}
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
 
public void Envoie(String MESSAGE) {
	Socket_Out.print(MESSAGE + '\u0000');
	Socket_Out.flush();
}
Si quelqu'un peut m'indiquer comment placer mes mot clef synchronized, ça m'intéresse