Broadcast Server
Un serveur de diffusion en temps réel construit avec Java et Spring Boot, permettant aux clients de se connecter et d'échanger des messages via WebSocket. Ce projet est inspiré du challenge Broadcast Server de roadmap.sh.
Table des matières
- Aperçu
- Fonctionnalités
- Prérequis
- Installation
- Utilisation
- Interface Web
- Architecture technique
- Messages et protocole
- Exemples
- Contribution
Aperçu
Le Broadcast Server est une application de chat en temps réel qui démontre l'utilisation des WebSockets pour la communication bidirectionnelle entre un serveur et plusieurs clients. Le projet comprend :
- Un serveur WebSocket Spring Boot
- Un client CLI (Command Line Interface)
- Une interface web HTML/JavaScript
Fonctionnalités
- Communication en temps réel via WebSocket
- Multi-clients : Support de connexions simultanées illimitées
- Historique des messages : Conservation des 35 derniers messages
- Notifications système : Annonce des arrivées et départs
- Double interface : CLI et Web
- Gestion d'erreurs : Reconnexion automatique et gestion des déconnexions
- Format JSON : Communication structurée entre client et serveur
Prérequis
- Java 17+ installé sur votre machine
- Maven 3.6+ pour la compilation
- Un terminal/console pour exécuter les commandes
Installation
1. Cloner le dépôt
git clone https://github.com/Anfrejkvlv/BroadCastServer.git
cd BroadCast Server
2. Compiler le projet
mvn clean package
Cela génère un fichier JAR exécutable dans le dossier target/.
Utilisation
Démarrer le serveur
java -jar target/BroadCastServer-1.jar start
Le serveur démarre sur le port 8085 et écoute les connexions WebSocket sur ws://localhost:8085/broadcast.
Sortie attendue :
BroadCastServer démarré sur le port:8085...
Connecter un client CLI
Dans un nouveau terminal :
java -jar target/BroadCastServer-1.jar connect
Processus de connexion :
- Le système demande votre pseudo
- La connexion s'établit avec le serveur
- Vous recevez l'historique des 35 derniers messages
- Vous pouvez commencer à échanger avec les autres utilisateurs
Exemple de session :
Entrez votre pseudo: Alexandra Odinov
Connexion établie avec le serveur!
Connecté ! Tapez vos messages (tapez 'exit' pour quitter)...
> Bonjour tout le monde !
[Serveur] : Persi a rejoint la discussion
[Persi] : Salut Alexandra Odinov !
> Comment ça va ?
Commandes disponibles
| Commande | Description |
|---|---|
start |
Démarre le serveur WebSocket |
connect |
Connecte un client CLI au serveur |
exit |
Déconnecte le client (disponible une fois connecté) |
Interface Web
Une interface web est également disponible pour une expérience utilisateur plus conviviale.

Accéder à l'interface web
- Démarrez le serveur :
java -jar target/BroadCastServer-1.jar start - Ouvrez votre navigateur à l'adresse : http://localhost:8085
- Entrez votre pseudo et cliquez sur "Se connecter"
Fonctionnalités de l'interface web
- Affichage des messages en temps réel
- Gestion du pseudo
- Scroll automatique vers les nouveaux messages
- Bouton de déconnexion
- ️ Messages système différenciés (INFO)
Architecture technique
Technologies utilisées
- Spring Boot 4.0.0 : Framework Java pour l'application
- Spring WebSocket : Support natif des WebSockets
- Jackson : Sérialisation/désérialisation JSON
- Java NIO : Communication réseau non-bloquante
- ConcurrentHashMap : Gestion thread-safe des sessions
Composants principaux
1. BroadcastHandler.java
Gère le cycle de vie des connexions WebSocket :
- Connexion : Enregistrement du client et envoi de l'historique
- Réception : Traitement des messages entrants
- Diffusion : Broadcast à tous les clients connectés
- Déconnexion : Nettoyage et notification
Messages et protocole
Types de messages
1. JOIN - Connexion d'un utilisateur
{
"type": "JOIN",
"sender": "Alexandra Odinov",
"content": null
}
Réponse du serveur :
- Envoi de l'historique des messages
- Broadcast d'un message INFO aux autres clients
2. CHAT - Message de discussion
{
"type": "CHAT",
"sender": "Alexandra Odinov",
"content": "Bonjour tout le monde !"
}
Traitement :
- Ajout à l'historique
- Diffusion à tous les clients connectés
3. INFO - Message système
{
"type": "INFO",
"sender": "Serveur",
"content": "Alexandra Odinov a rejoint la discussion"
}
Cas d'utilisation :
- Arrivée d'un nouveau membre
- Départ d'un membre
- Erreurs ou notifications
Exemples
Scénario 1 : Conversation entre 3 utilisateurs
Terminal 1 - Serveur
java -jar BroadCastServer-1.jar start
Terminal 2 - Alexandra Odinov
java -jar BroadCastServer-1.jar connect
Entrez votre pseudo: Alexandra Odinov
Connecté !
> Bonjour !
Terminal 3 - Persi
java -jar BroadCastServer-1.jar connect
Entrez votre pseudo: Persi
[ Serveur] : Alice a rejoint la discussion
[Alice] : Bonjour !
Connecté !
> Salut Alexandra Odinov !
Terminal 4 - Nikita
java -jar BroadCastServer-1.jar connect
Entrez votre pseudo: Nikita
[Alexandra Odinov] : Bonjour !
[Persi] : Salut Alexandra Odinov !
Connecté !
> Hey les amis !
Scénario 2 : Mix CLI et Web
- Démarrez le serveur
- Connectez un client CLI nommé "Alexandra Odinov"
- Ouvrez http://localhost:8085 dans votre navigateur (utilisateur "Persi")
- Les messages échangés apparaissent sur les deux interfaces en temps réel
Contribution
Les contributions sont les bienvenues ! Voici comment participer :
- Fork le projet
- Créez une branche pour votre fonctionnalité (
git checkout -b feature/NewFeature) - Committez vos changements (
git commit -m 'Add some NewFeature') - Pushez vers la branche (
git push origin feature/NewFeature) - Ouvrez une Pull Request
Guidelines
- Suivez les conventions de code Java existantes
- Ajoutez des tests pour les nouvelles fonctionnalités
- Mettez à jour la documentation si nécessaire
- Assurez-vous que le build Maven passe (
mvn clean verify)
Remerciements
- roadmap.sh pour l'inspiration du projet
- geeksforgeeks.org pour le guide, cela m'a aidé pour la compréhension du concept des Websocket avec Spring Boot
- La communauté Spring Boot pour la documentation exceptionnelle
- Tous les contributeurs qui ont participé à ce projet
Lien du projet : https://roadmap.sh/projects/broadcast-server Notez (avec les étoiles) le projet vous a été utile !

Log in or sign up for Devpost to join the conversation.