Bonjour à tous,
J'aimerais optimiser un serveur Java utilisant des sockets. J'ai commencé à le réaliser il y a longtemps à partir d'un tutorial, car java et moi ça faisait 2. J'ai entièrement tout recodé sauf quelques parties : la partie reception de donnée et la partie envoie de donnée. Mais en utilisant un profiler, j'ai pu voir que ces parties étaient les plus critiques.
Même si je trouve ça logique, j'aimerais être sure que ces parties soient bien optimisées, voilà comment ça se passe :
Pour la partie reception de donnée, chaque client déclenche l'ouverture d'un nouveau thread avec ceci dans la méthode run() :
1 2 3 4 5 6 7 8 9 10 11 12
| public void run() {
String Message = "";
char charCur[] = new char[1];
while (_in.read(charCur, 0, 1) != -1) {
if (charCur[0] != '\u0000') {
Message += charCur[0];
} else {
// Message reçu, suite du traitement
Message = "";
}
}
} |
_in est déclaré plus tôt dans le constructeur de la classe par :
_in = new BufferedReader(new InputStreamReader(_s.getInputStream()));
où _s correspond à l'objet Socket du client.
Pour l'envoie de donnée depuis le serveur ça fait comme ça :
1 2
| _out.print(StringMessageDeRetour + "\u0000");
_out.flush(); |
où _out est déclaré au même endroit que _in (dans chque thread client) de la façcon suivante :
_out = new PrintWriter(_s.getOutputStream());
Voilà, pensez vous qu'il est possible de faire mieux (rapidité et/ou ressources utilisées) ? Je commence à connaitre JAVA, mais je n'ai aucune connaissance théorique pointue, ce qui m'empêche d'optimiser ce genre de chose.
Autre chose, je ne sais pas trop où placer mes méthodes d'envoie de donnée depuis le serveur. Au départ, elles étaient dans les threads de chaque client, mais en faisant des test de surcharge, j'ai eu droit à quelques erreurs. Maintenant je lance un thread à part au lancement du serveur qui s'occupe exclusivement de l'envoie de donnée, je n'ai plus d'erreur mais je sais absolument pas si j'ai bien fait.
Voila, merci d'avance pour l'aide
Partager