Ta projekt prikazuje HTTP pretakanje z uporabo Server-Sent Events (SSE) v Spring Boot WebFlux. Sestavljen je iz dveh aplikacij:
- Calculator Server: reaktivna spletna storitev, ki izvaja izračune in pretaka rezultate prek SSE
- Calculator Client: odjemalska aplikacija, ki uporablja streaming endpoint
- Java 17 ali novejša
- Maven 3.6 ali novejši
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 izpostavi
/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 - Porabi streaming odgovor
- Vsak dogodek izpiše v konzolo
- Makes a request to calculate
Odpri terminal in pojdi v mapo serverja:
cd calculator-server
mvn clean package
mvn spring-boot:runStrežnik bo zagnan na http://localhost:8080
Videti bi moral izhod, kot je:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Odpri nov terminal in pojdi v mapo klienta:
cd calculator-client
mvn clean package
mvn spring-boot:runKlient se bo povezal s strežnikom, izvedel izračun in prikazal streaming rezultate.
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.jarStrežnik lahko preizkusiš tudi z brskalnikom ali curl:
Obišči: 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"Ko zaženeš klienta, bi moral videti streaming izhod, podoben temu:
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 - Vrne Server-Sent Events z napredkom izračuna in rezultatom
Primer zahteve:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Primer odgovora:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Vrata 8080 so že zasedena
- Ustavi druge aplikacije, ki uporabljajo vrata 8080
- Ali spremeni vrata strežnika v
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:stop, če teče kot ozadinski proces
- Spring Boot 3.3.1 - aplikacijski okvir
- Spring WebFlux - reaktivni spletni okvir
- Project Reactor - knjižnica za reaktivne tokove
- Netty - strežnik z neblokirnim I/O
- Maven - orodje za gradnjo
- Java 17+ - programski jezik
Poskusi spremeniti kodo, da:
- dodaš več matematičnih operacij
- vključiš obravnavo napak za neveljavne operacije
- dodaš beleženje zahtev in odgovorov
- implementiraš avtentikacijo
- dodaš enotne teste
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo AI prevajalske storitve Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da avtomatizirani prevodi lahko vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvorno jeziku velja za avtoritativni vir. Za pomembne informacije priporočamo strokovni človeški prevod. Za kakršnekoli nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda, ne odgovarjamo.