Det här projektet visar HTTP-streaming med Server-Sent Events (SSE) med Spring Boot WebFlux. Det består av två applikationer:
- Calculator Server: En reaktiv webbtjänst som utför beräkningar och streamar resultat med SSE
- Calculator Client: En klientapplikation som konsumerar streaming-endpointen
- Java 17 eller högre
- Maven 3.6 eller högre
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 exponerar en
/calculate-endpoint som:- Tar emot query-parametrar:
a(nummer),b(nummer),op(operation) - Stödda operationer:
add,sub,mul,div - Returnerar Server-Sent Events med beräkningsprogress och resultat
- Tar emot query-parametrar:
-
Calculator Client ansluter till servern och:
- Skickar en förfrågan för att beräkna
7 * 5 - Konsumerar den strömmande responsen
- Skriver ut varje event i konsolen
- Skickar en förfrågan för att beräkna
Öppna en terminal och navigera till servermappen:
cd calculator-server
mvn clean package
mvn spring-boot:runServern startar på http://localhost:8080
Du bör se output som:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Öppna en ny terminal och navigera till klientmappen:
cd calculator-client
mvn clean package
mvn spring-boot:runKlienten ansluter till servern, utför beräkningen och visar de strömmande resultaten.
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 också testa servern med en webbläsare eller curl:
Besök: 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 du kör klienten bör du se strömmande output liknande:
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, returnerar NaN om b = 0)
Parametrar:
a(obligatorisk): Första talet (double)b(obligatorisk): Andra talet (double)op(obligatorisk): Operation (add,sub,mul,div)
Svar:
- Content-Type:
text/event-stream - Returnerar Server-Sent Events med beräkningsprogress och resultat
Exempel på förfrågan:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Exempel på svar:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Port 8080 används redan
- Stoppa andra applikationer som använder port 8080
- Eller ändra serverporten i
calculator-server/src/main/resources/application.yml
-
Connection refused
- Kontrollera att servern körs innan klienten startas
- Kontrollera att servern startade korrekt på port 8080
-
Problem med parameter-namn
- Projektet inkluderar Maven-kompilatorinställning med flaggan
-parameters - Om du får problem med parameterbindning, se till att projektet byggs med denna konfiguration
- Projektet inkluderar Maven-kompilatorinställning med flaggan
- Tryck
Ctrl+Ci terminalen där varje applikation körs - Eller använd
mvn spring-boot:stopom de körs som bakgrundsprocess
- Spring Boot 3.3.1 - Applikationsramverk
- Spring WebFlux - Reaktivt webb-ramverk
- Project Reactor - Bibliotek för reaktiva streams
- Netty - Icke-blockerande I/O-server
- Maven - Byggverktyg
- Java 17+ - Programmeringsspråk
Testa att ändra koden för att:
- Lägga till fler matematiska operationer
- Inkludera felhantering för ogiltiga operationer
- Lägga till loggning av förfrågningar/svar
- Implementera autentisering
- Lägga till enhetstester
Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår vid användning av denna översättning.