Mini IRC
Presentation
Objectif principal : Un serveur de chat style IRC. Les utilisateurs se connectent, rejoignent des channels, et discutent en temps reel. Avec messages prives et commandes /nick, /join, /msg, etc.
Technologies utilisees : Java avec sockets TCP. NIO avec Selector pour gerer plusieurs clients dans un seul thread (scalabilite). Protocole texte custom inspire de IRC.
Fonctionnalites cles : Multi-channels, changement de pseudo, messages prives, liste des utilisateurs, notifications join/leave, ping/pong pour detecter les deconnexions.
Livrables attendus : Serveur qui supporte 50+ clients simultanes. Client console basique. Documentation du protocole.
Calendrier previsionnel : Trois semaines. Java NIO c'est un autre paradigme que les threads classiques, fallait comprendre les Selectors.
Parties prenantes & criteres de succes : TP de reseaux. Le but c'etait d'implementer un protocole applicatif et gerer la concurrence.
Le Defi
Gerer des centaines de clients avec peu de threads. Un thread par client ca scale pas. Java NIO permet d'avoir un seul thread qui gere toutes les connexions, mais le code devient plus complexe (non-blocking, state machines).
La Solution
Un Selector qui monitore tous les channels. Quand un client est "readable", on lit ce qu'on peut (non-blocking). Chaque client a un buffer pour accumuler les donnees jusqu'a avoir un message complet. C'est du event-driven programming.
Architecture Technique
Classe Server avec la boucle principale et le Selector. Classe Client qui track l'etat d'un client (nick, channels, buffer). Classe Channel qui gere les membres et broadcast les messages. Classe Protocol qui parse les commandes et genere les reponses. Pattern Observer pour notifier les clients.
Points Cles
- Java NIO non-bloquant
- Protocole IRC-like
- Channels et messages prives
Apercu
Resultats & Apprentissages
Le serveur tient 100+ clients sur ma machine sans probleme. On a fait un test avec toute la promo connectee. NIO c'est puissant mais demande de penser differemment. Je comprends mieux comment marchent les serveurs haute performance.
Evolutions Futures
Chiffrement TLS pour les messages. Persistence des messages (historique). Modes de channel (+o pour les ops). Interface graphique avec JavaFX. Compatibilite avec les vrais clients IRC.