-
Serveur et ThreadPooling
Bonjour à tous !
Je souhaite réaliser un serveur multi client en Java, et il y a un point que je ne comprends pas très bien : l'ecoute sur un socket.
Je sais comment fonctionne l'ecoute sur un socket, seulement je ne sais pas comment faire pour synchroniser tous les threads d'écoute.
Imaginons, j'ai N clients connectés sur le serveur, dois-je avoir N threads d'écoute ? En sachant que chaque action demandée par un client est exécutée dans une threadpool.
La question est donc, faut il réellement 1 thread d'ecoute par client (j'ai beau reflechir je ne vois pas d'autres solutions viables...) ? Et si oui, dois-je inclure ces threads dans ma threadpool ?
Merci
-
salut,
comme la réponse à la requête du client doit être renvoyée dans le même thread, il suffit que ton thread d'exécution de la requête connaissent l'instance de Socket obtenu en retour de accept();
ensuite tu peux très bien avoir un threadpool pour gérer la multi écoute (sur plusieurs ports différents forcément),
et un threadpool (ou plusieurs) qui gère les threads d'éxecution (donc ayant une référence sur l'instance de Socket) le premier créé un handler sur l'instance de Socket et la passe à l'autre
si tu gères tes threadpool par des ThreadPoolExecutor, tu peux facilement gérer la synchro comme tu l'entends en utilisant la queue adaptée, et en utlisant soit un ThreadPoolExecutor unique, soit une instance par client,