Dự án này minh họa streaming HTTP sử dụng Server-Sent Events (SSE) với Spring Boot WebFlux. Nó bao gồm hai ứng dụng:
- Calculator Server: Dịch vụ web phản ứng thực hiện các phép tính và truyền kết quả qua SSE
- Calculator Client: Ứng dụng client tiêu thụ endpoint streaming
- Java 17 trở lên
- Maven 3.6 trở lên
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 cung cấp endpoint
/calculate:- Nhận các tham số truy vấn:
a(số),b(số),op(phép toán) - Các phép toán hỗ trợ:
add,sub,mul,div - Trả về Server-Sent Events với tiến trình và kết quả tính toán
- Nhận các tham số truy vấn:
-
Calculator Client kết nối tới server và:
- Gửi yêu cầu tính
7 * 5 - Tiêu thụ phản hồi streaming
- In từng sự kiện ra console
- Gửi yêu cầu tính
Mở terminal và chuyển đến thư mục server:
cd calculator-server
mvn clean package
mvn spring-boot:runServer sẽ chạy tại http://localhost:8080
Bạn sẽ thấy đầu ra như sau:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Mở terminal mới và chuyển đến thư mục client:
cd calculator-client
mvn clean package
mvn spring-boot:runClient sẽ kết nối tới server, thực hiện phép tính và hiển thị kết quả 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.jarBạn cũng có thể kiểm tra server bằng trình duyệt hoặc curl:
Truy cập: 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"Khi chạy client, bạn sẽ thấy kết quả streaming tương tự:
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Cộng (a + b)sub- Trừ (a - b)mul- Nhân (a * b)div- Chia (a / b, trả về NaN nếu b = 0)
Tham số:
a(bắt buộc): Số thứ nhất (double)b(bắt buộc): Số thứ hai (double)op(bắt buộc): Phép toán (add,sub,mul,div)
Phản hồi:
- Content-Type:
text/event-stream - Trả về Server-Sent Events với tiến trình và kết quả tính toán
Ví dụ Yêu cầu:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Ví dụ Phản hồi:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Cổng 8080 đã được sử dụng
- Dừng các ứng dụng khác đang dùng cổng 8080
- Hoặc thay đổi cổng server trong
calculator-server/src/main/resources/application.yml
-
Kết nối bị từ chối
- Đảm bảo server đang chạy trước khi khởi động client
- Kiểm tra server đã khởi động thành công trên cổng 8080
-
Lỗi tên tham số
- Dự án có cấu hình Maven compiler với flag
-parameters - Nếu gặp lỗi binding tham số, hãy chắc chắn dự án được build với cấu hình này
- Dự án có cấu hình Maven compiler với flag
- Nhấn
Ctrl+Ctrong terminal nơi ứng dụng đang chạy - Hoặc dùng
mvn spring-boot:stopnếu chạy dưới dạng background process
- Spring Boot 3.3.1 - Framework ứng dụng
- Spring WebFlux - Framework web phản ứng
- Project Reactor - Thư viện reactive streams
- Netty - Server I/O không chặn
- Maven - Công cụ build
- Java 17+ - Ngôn ngữ lập trình
Thử chỉnh sửa code để:
- Thêm nhiều phép toán hơn
- Bao gồm xử lý lỗi cho các phép toán không hợp lệ
- Thêm ghi log request/response
- Triển khai xác thực
- Thêm unit test
Tuyên bố từ chối trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ gốc của nó nên được coi là nguồn chính xác và đáng tin cậy. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp do con người thực hiện. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc giải thích sai nào phát sinh từ việc sử dụng bản dịch này.