Ce projet illustre le streaming HTTP en utilisant les Server-Sent Events (SSE) avec Spring Boot WebFlux. Il se compose de deux applications :
- Calculator Server : un service web réactif qui effectue des calculs et diffuse les résultats via SSE
- Calculator Client : une application cliente qui consomme le point de terminaison de streaming
- Java 17 ou supérieur
- Maven 3.6 ou supérieur
java/
├── calculator-server/ # Spring Boot server with SSE endpoint
│ ├── src/main/java/com/example/calculatorserver/
│ │ ├── CalculatorServerApplication.java
│ │ └── CalculatorController.java
│ └── pom.xml
├── calculator-client/ # Spring Boot client application
│ ├── src/main/java/com/example/calculatorclient/
│ │ └── CalculatorClientApplication.java
│ └── pom.xml
└── README.md
-
Le Calculator Server expose un point de terminaison
/calculatequi :- Accepte les paramètres de requête :
a(nombre),b(nombre),op(opération) - Opérations supportées :
add,sub,mul,div - Retourne des Server-Sent Events avec la progression du calcul et le résultat
- Accepte les paramètres de requête :
-
Le Calculator Client se connecte au serveur et :
- Effectue une requête pour calculer
7 * 5 - Consomme la réponse en streaming
- Affiche chaque événement dans la console
- Effectue une requête pour calculer
Ouvrez un terminal et placez-vous dans le répertoire du serveur :
cd calculator-server
mvn clean package
mvn spring-boot:runLe serveur démarrera sur http://localhost:8080
Vous devriez voir une sortie similaire à :
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Ouvrez un nouveau terminal et placez-vous dans le répertoire du client :
cd calculator-client
mvn clean package
mvn spring-boot:runLe client se connectera au serveur, effectuera le calcul et affichera les résultats en streaming.
cd calculator-server
mvn clean package
java -jar target/calculator-server-0.0.1-SNAPSHOT.jarcd calculator-client
mvn clean package
java -jar target/calculator-client-0.0.1-SNAPSHOT.jarVous pouvez aussi tester le serveur via un navigateur web ou curl :
Visitez : http://localhost:8080/calculate?a=10&b=5&op=add
curl "http://localhost:8080/calculate?a=10&b=5&op=add" -H "Accept: text/event-stream"Lors de l’exécution du client, vous devriez voir un flux de sortie similaire à :
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Addition (a + b)sub- Soustraction (a - b)mul- Multiplication (a * b)div- Division (a / b, retourne NaN si b = 0)
Paramètres :
a(obligatoire) : Premier nombre (double)b(obligatoire) : Second nombre (double)op(obligatoire) : Opération (add,sub,mul,div)
Réponse :
- Content-Type :
text/event-stream - Retourne des Server-Sent Events avec la progression du calcul et le résultat
Exemple de requête :
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Exemple de réponse :
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Port 8080 déjà utilisé
- Arrêtez toute autre application utilisant le port 8080
- Ou modifiez le port du serveur dans
calculator-server/src/main/resources/application.yml
-
Connexion refusée
- Assurez-vous que le serveur est lancé avant de démarrer le client
- Vérifiez que le serveur a bien démarré sur le port 8080
-
Problèmes de nom de paramètre
- Ce projet inclut une configuration Maven du compilateur avec le flag
-parameters - Si vous rencontrez des problèmes de liaison des paramètres, assurez-vous que le projet est construit avec cette configuration
- Ce projet inclut une configuration Maven du compilateur avec le flag
- Appuyez sur
Ctrl+Cdans le terminal où chaque application tourne - Ou utilisez
mvn spring-boot:stopsi elles tournent en arrière-plan
- Spring Boot 3.3.1 - Framework d’application
- Spring WebFlux - Framework web réactif
- Project Reactor - Bibliothèque de flux réactifs
- Netty - Serveur I/O non bloquant
- Maven - Outil de build
- Java 17+ - Langage de programmation
Essayez de modifier le code pour :
- Ajouter plus d’opérations mathématiques
- Inclure la gestion des erreurs pour les opérations invalides
- Ajouter la journalisation des requêtes/réponses
- Implémenter l’authentification
- Ajouter des tests unitaires
Avertissement :
Ce document a été traduit à l’aide du service de traduction automatique Co-op Translator. Bien que nous nous efforçons d’assurer l’exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d’origine doit être considéré comme la source faisant foi. Pour les informations critiques, une traduction professionnelle réalisée par un humain est recommandée. Nous déclinons toute responsabilité en cas de malentendus ou de mauvaises interprétations résultant de l’utilisation de cette traduction.