Projek ini menunjukkan penstriman HTTP menggunakan Server-Sent Events (SSE) dengan Spring Boot WebFlux. Ia terdiri daripada dua aplikasi:
- Calculator Server: Perkhidmatan web reaktif yang melakukan pengiraan dan menstrim keputusan menggunakan SSE
- Calculator Client: Aplikasi klien yang menggunakan endpoint penstriman
- Java 17 atau lebih tinggi
- Maven 3.6 atau lebih tinggi
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 menyediakan endpoint
/calculateyang:- Menerima parameter query:
a(nombor),b(nombor),op(operasi) - Operasi yang disokong:
add,sub,mul,div - Mengembalikan Server-Sent Events dengan kemajuan pengiraan dan keputusan
- Menerima parameter query:
-
Calculator Client menyambung ke server dan:
- Membuat permintaan untuk mengira
7 * 5 - Menggunakan respons penstriman
- Mencetak setiap acara ke konsol
- Membuat permintaan untuk mengira
Buka terminal dan pergi ke direktori server:
cd calculator-server
mvn clean package
mvn spring-boot:runServer akan bermula 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 pergi ke direktori klien:
cd calculator-client
mvn clean package
mvn spring-boot:runKlien akan menyambung ke server, melakukan pengiraan, dan memaparkan keputusan penstriman.
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 boleh menguji server menggunakan pelayar web atau curl:
Lawati: 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"Apabila menjalankan klien, anda akan melihat output penstriman seperti:
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Penambahan (a + b)sub- Penolakan (a - b)mul- Pendaraban (a * b)div- Pembahagian (a / b, mengembalikan NaN jika b = 0)
Parameter:
a(wajib): Nombor pertama (double)b(wajib): Nombor kedua (double)op(wajib): Operasi (add,sub,mul,div)
Respons:
- Content-Type:
text/event-stream - Mengembalikan Server-Sent Events dengan kemajuan pengiraan dan keputusan
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 mana-mana aplikasi lain yang menggunakan port 8080
- Atau tukar port server dalam
calculator-server/src/main/resources/application.yml
-
Sambungan ditolak
- Pastikan server berjalan sebelum memulakan klien
- Semak bahawa server berjaya bermula pada port 8080
-
Isu nama parameter
- Projek ini termasuk konfigurasi compiler Maven dengan flag
-parameters - Jika anda menghadapi masalah pengikatan parameter, pastikan projek dibina dengan konfigurasi ini
- Projek ini termasuk konfigurasi compiler Maven dengan flag
- Tekan
Ctrl+Cdi terminal tempat setiap aplikasi dijalankan - Atau gunakan
mvn spring-boot:stopjika dijalankan sebagai proses latar belakang
- Spring Boot 3.3.1 - Rangka kerja aplikasi
- Spring WebFlux - Rangka kerja web reaktif
- Project Reactor - Perpustakaan aliran reaktif
- Netty - Server I/O tanpa sekatan
- Maven - Alat binaan
- Java 17+ - Bahasa pengaturcaraan
Cuba ubah suai kod untuk:
- Menambah lebih banyak operasi matematik
- Sertakan pengendalian ralat untuk operasi tidak sah
- Tambah log permintaan/respons
- Laksanakan pengesahan
- Tambah ujian unit
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan profesional oleh manusia adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.