envoyer un message simultanement aux clients [JAVA] - Java - Programmation
Marsh Posté le 15-01-2005 à 21:15:42
Citation : public static synchronized void main ( String[] args) |
je l'avais encore jamais vu celle là
C'est quel thread, enfin, c'est où dans ton programme le truc qui doit décider d'envoyer un message à tous les clients ?
sinon, l'idée est tout bête : il faut que tu enregistres tous tes "ServeOneClient " dans une Collection, et quand tu veux balancer un message à tous tes clients tu fais une simple boucle ....
Marsh Posté le 15-01-2005 à 21:20:51
oops le synchronized est a viré biensur il est resté suite a des test farfelus lol
en fait la ou j'envoi un message c'est le out.println(str); mais ca l'envoi a un seul client forcement
Collection je connais pas mais j'ai deja fais avec un Vector mais dans une boucle c'est plus vraiment simultané ( si c'est comme le vector ou bien je me trompe ? )
merci de ton aide benou
Marsh Posté le 15-01-2005 à 21:41:27
t'as mal compris ma queston : je te demande pas où tu envois ton message à un client, je te demande qu'est ce qui va déclencher l'envoi d'un même message à tous tes clients. Faut bien qu'il y ait un truc qui le déclenche ....
ensuite, si tu fis de la socket, tu ne pourras pas avoir d'envoi réellement simultané ... mais ca revient quasiment au même : une boucle avec u tpint sur une socket ca se fait assez vite ...
(un Vector est une Collection)
Marsh Posté le 15-01-2005 à 21:50:00
ce qui le declanche sera par exemple un client envoi au serveur un string "ALL" et puis il ecrit a tout le monde ALL ( c vraiment pour me faire la main quoi rien de precis)
bein la ca me decois un peu parce que je l'ai fais avec un Vector ( je savais pas que ca s'appeler collection aussi lol) mais je pensais que avec du multi thread on pourrai faire du vrai simultane
Marsh Posté le 15-01-2005 à 21:55:21
bha tu sais, ta carte reseau elle peut pas envoyer plusieurs paquets en même temps => au final c'est toujours du séquentiel ...
rien t'empeche dans créer un thread pour envoyer le message à chacun de tes clients , ca va plus ou moins paralléliser l'envoi, mais tu vas rien y gagner niveau perf (même y perdre à mon avis)
Vector c'est classe qui implémente l'interface Collection. regarde la javadoc ...
Marsh Posté le 15-01-2005 à 23:47:07
et bien en fait maintenant que tu le dis j'aimerai parallelisé ca me parait plus logique pour etre "simultané" biensur on ne peut pas avoir de vrai simultaneité parce que j'imagine que un thread prends la main et apres l'autre etc mais en theorie c'est ca du simultané. si tu as un conseil ou des liens pour m'aider a parallelisé ce serveur ils seront les bienvenus
Marsh Posté le 16-01-2005 à 10:52:04
il est déjà parralélisé puisque tu traite chaque client dans un tread.
si ensuite tu veux pouvoir, depuis ton serveur, lancer un traitement parralèle sur tous tes clients, il suffit que tu lances ce traitement dans un nouveau thread à chaque fois ... => dasn ta boule sur tes clients, a la place de simplement envoyer le message, tu créés et lance un thread qui envoie le message ...
mais comme je te ds, pour moi, ca a pas d'intérêt ...
et pour optmiser un mnimum le mahin, faudrait pooler les threads ...
Marsh Posté le 15-01-2005 à 19:36:18
Bonjour,
je pense que le titre est explicite mais je vais me repeter un peu : j'ai un serveur creer avec une serversocket qui accepte plusieurs clients maintenant j'aimerai bien envoyer un message simultanement a tout les clients et c'est la que mon probleme se situe ( j'ai deja vu le multicastsocket mais j'aimerai une methode avec des threads pour mieux comprendre (puis j'aimerai bien que ca marche hors lan surtout), sinon j'ai egalement réussis avec une queue de clients dans un vecteur mais la c'est plus simultané)
voila le code de base du serveur :
Si vous avez un conseil n'hesité pas ( meme si vous trouvez le code ci dessus un peu crade je suis a tout ouie)
Amicalement Qxn
Message édité par qxn le 15-01-2005 à 21:22:59