Conservez simplement une hashmap en mémoire d'un type d'ID client vers l'objet java.net.Socket qui représente le socket de ce client. Vous devez trouver un moyen d'attribuer des ID clients, soit fournis par le client, soit fournis par le serveur via un schéma d'autorisation.
Lorsqu'un message arrive pour un ID client, récupérez le socket sur la carte et envoyez-lui un message. Cette carte doit être stockée dans un objet de type singleton et doit être correctement synchronisée. Utilisez une carte de hachage simultanée. En outre, les lectures et les écritures de socket doivent être synchronisées si vous utilisez plusieurs threads.
J'ai publié un exemple de code en tant que github gist. C'est un peu différent de ce que j'ai expliqué ci-dessus. Je ne stocke pas de sockets dans la carte, je stocke les gestionnaires de clients qui ont le socket. De plus, les lectures de socket n'ont pas besoin de synchronisation: chaque client a son propre thread qui est le seul thread à lire depuis le socket. Les écritures de socket doivent cependant être synchronisées, car le thread du client d'envoi écrit sur le socket du client de réception.
Vous êtes probablement mieux d'utiliser quelque chose comme JBoss Netty plutôt que de rouler les vôtres.
À qui vote pour clore la question, pourquoi faites-vous cela? Si vous avez un problème, commentez ici !!!!!! – Adham