Dette projekt demonstrerer HTTP streaming ved brug af Server-Sent Events (SSE) med Spring Boot WebFlux. Det består af to applikationer:
- Calculator Server: En reaktiv webservice, der udfører beregninger og streamer resultater ved hjælp af SSE
- Calculator Client: En klientapplikation, der forbruger streaming-endpointet
- Java 17 eller nyere
- Maven 3.6 eller nyere
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
-
Calculator Server eksponerer en
/calculateendpoint that:- Accepts query parameters:
a(number),b(number),op(operation) - Supported operations:
add,sub,mul,div - Returns Server-Sent Events with calculation progress and result
- Accepts query parameters:
-
The Calculator Client connects to the server and:
- Makes a request to calculate
7 * 5 - Forbruger den streamede respons
- Printer hver event til konsollen
- Makes a request to calculate
Åbn en terminal og naviger til server-mappen:
cd calculator-server
mvn clean package
mvn spring-boot:runServeren starter på http://localhost:8080
Du skulle se output som:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Åbn en ny terminal og naviger til klient-mappen:
cd calculator-client
mvn clean package
mvn spring-boot:runKlienten opretter forbindelse til serveren, udfører beregningen og viser de streamede resultater.
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.jarDu kan også teste serveren via en webbrowser eller curl:
Besøg: 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"Når klienten kører, bør du se streamet output som:
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Addition (a + b)sub- Subtraction (a - b)mul- Multiplication (a * b)div- Division (a / b, returns NaN if b = 0)
Parameters:
a(required): First number (double)b(required): Second number (double)op(required): Operation (add,sub,mul,div)
Response:
- Content-Type:
text/event-stream - Returnerer Server-Sent Events med beregningsprogression og resultat
Eksempel på forespørgsel:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Eksempel på svar:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Port 8080 er allerede i brug
- Stop andre applikationer, der bruger port 8080
- Eller skift serverporten i
calculator-server/src/main/resources/application.yml
-
Connection refused
- Make sure the server is running before starting the client
- Check that the server started successfully on port 8080
-
Parameter name issues
- This project includes Maven compiler configuration with
-parametersflag - If you encounter parameter binding issues, ensure the project is built with this configuration
- This project includes Maven compiler configuration with
- Press
Ctrl+Cin the terminal where each application is running - Or use
mvn spring-boot:stophvis den kører som baggrundsproces
- Spring Boot 3.3.1 - Applikationsframework
- Spring WebFlux - Reaktivt webframework
- Project Reactor - Bibliotek til reaktive streams
- Netty - Non-blocking I/O server
- Maven - Byggeværktøj
- Java 17+ - Programmeringssprog
Prøv at ændre koden til at:
- Tilføje flere matematiske operationer
- Inkludere fejlhåndtering for ugyldige operationer
- Tilføje logning af forespørgsler/svar
- Implementere autentificering
- Tilføje enhedstests
Ansvarsfraskrivelse:
Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.