Dans le cadre d 'un TP on doit créer un serveur FTP basique, jusque là rien de bien compliqué. Mais là où je galère un peu c 'est le thread pool... En effet on doit éviter que le serveur ne s' "effondre" sous un aflu de requête => donc là thread pool.
Un pti bout de code vaut mieux qu'un long discours
Donc à chaque connexion sur le ServeurSocket, on balance le traitement dans un Runnable de type FtpRequest qui va tout gérer. Mais comment ça fonctionne dans le pool?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 ThreadPoolExecutor pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, new SynchronousQueue<Runnable>()); while (true) { try { //sock est un ServerSocket déclaré précédement sockClientServeur = sock.accept(); pool.execute(new FtpRequest(sockClientServeur,wdir)); } catch (IOException e) { e.printStackTrace(); } }
Je veux dire, le but du pool est -notamment- de garder une réserve de thread dans certaines limites pour éviter de les lancer (ce qui est couteux) . Donc après X connexion, c 'est ok j 'ai atteint le corePoolSize. Imaginons un des FtpRequest qui se termine -> il reste alors idle et n'est pas supprimé pour rester dans les bornes corePoolSize/maximumPoolSize. Une nouvelle connexion est établie et... il se passe quoi?
A) il lance un nouveau thread quand même : pas logique vu la doc
B) il remplace les paramètres du thread idle par les nouveaux? (aka il arrive à lui refiler la socket?!)
C) abracadabra?
je vous avoue que j'ai cherché longtemps mais rien trouvé![]()






Répondre avec citation




Partager