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 et
/calculateendpoint, som:- Accepterer query-parametre:
a(tal),b(tal),op(operation) - Understøttede operationer:
add,sub,mul,div - Returnerer Server-Sent Events med beregningsprogression og resultat
- Accepterer query-parametre:
-
Calculator Client forbinder til serveren og:
- Sender en forespørgsel for at beregne
7 * 5 - Forbruger den streamede respons
- Udskriver hver event til konsollen
- Sender en forespørgsel for at beregne
Å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 forbinder 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 lignende:
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Addition (a + b)sub- Subtraktion (a - b)mul- Multiplikation (a * b)div- Division (a / b, returnerer NaN hvis b = 0)
Parametre:
a(påkrævet): Første tal (double)b(påkrævet): Andet tal (double)op(påkrævet): Operation (add,sub,mul,div)
Respons:
- 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å respons:
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 ændr serverporten i
calculator-server/src/main/resources/application.yml
-
Forbindelse afvist
- Sørg for, at serveren kører, før klienten startes
- Tjek at serveren er startet korrekt på port 8080
-
Problemer med parameter-navne
- Projektet inkluderer Maven compiler-konfiguration med
-parametersflag - Hvis du oplever problemer med parameterbinding, skal du sikre, at projektet er bygget med denne konfiguration
- Projektet inkluderer Maven compiler-konfiguration med
- Tryk
Ctrl+Ci terminalen, hvor hver applikation kører - Eller brug
mvn spring-boot:stop, hvis applikationen kører som en baggrundsproces
- Spring Boot 3.3.1 - Applikationsframework
- Spring WebFlux - Reaktivt webframework
- Project Reactor - Bibliotek til reaktive streams
- Netty - Non-blocking I/O server
- Maven - Build-væ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 logging af forespørgsler/responser
- 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 oprindelige sprog 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.