Proyek ini menunjukkan HTTP streaming menggunakan Server-Sent Events (SSE) dengan Spring Boot WebFlux. Terdiri dari dua aplikasi:
- Calculator Server: Layanan web reaktif yang melakukan perhitungan dan mengalirkan hasil menggunakan SSE
- Calculator Client: Aplikasi klien yang mengonsumsi endpoint streaming
- Java 17 atau lebih baru
- Maven 3.6 atau lebih baru
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 membuka endpoint
/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 - Mengonsumsi respons streaming
- Mencetak setiap event ke konsol
- Makes a request to calculate
Buka terminal dan masuk ke direktori server:
cd calculator-server
mvn clean package
mvn spring-boot:runServer akan berjalan di http://localhost:8080
Anda akan melihat output seperti:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Buka terminal baru dan masuk ke direktori client:
cd calculator-client
mvn clean package
mvn spring-boot:runClient akan terhubung ke server, melakukan perhitungan, dan menampilkan hasil 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.jarAnda juga bisa menguji server menggunakan browser atau curl:
Kunjungi: 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"Saat menjalankan client, Anda akan melihat output streaming seperti:
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 - Mengembalikan Server-Sent Events dengan progres perhitungan dan hasil
Contoh Permintaan:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Contoh Respons:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Port 8080 sudah digunakan
- Hentikan aplikasi lain yang menggunakan port 8080
- Atau ubah port server di
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:stopjika menjalankan sebagai proses latar belakang
- Spring Boot 3.3.1 - Framework aplikasi
- Spring WebFlux - Framework web reaktif
- Project Reactor - Library reactive streams
- Netty - Server I/O non-blocking
- Maven - Alat build
- Java 17+ - Bahasa pemrograman
Cobalah memodifikasi kode untuk:
- Menambahkan operasi matematika lainnya
- Menyertakan penanganan error untuk operasi tidak valid
- Menambahkan logging permintaan/respons
- Mengimplementasikan autentikasi
- Menambahkan unit test
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berusaha untuk akurasi, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang salah yang timbul dari penggunaan terjemahan ini.