Този проект демонстрира HTTP стрийминг с помощта на Server-Sent Events (SSE) и Spring Boot WebFlux. Състои се от две приложения:
- Calculator Server: реактивен уеб сървис, който извършва изчисления и стриймва резултатите чрез SSE
- Calculator Client: клиентско приложение, което консумира стрийминг ендпойнта
- Java 17 или по-нова версия
- Maven 3.6 или по-нова версия
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 предоставя ендпойнт
/calculate, който:- Приема query параметри:
a(число),b(число),op(операция) - Поддържани операции:
add,sub,mul,div - Връща Server-Sent Events с прогреса на изчислението и резултата
- Приема query параметри:
-
Calculator Client се свързва със сървъра и:
- Изпраща заявка за изчисление на
7 * 5 - Консумира стрийминг отговора
- Извежда всяко събитие в конзолата
- Изпраща заявка за изчисление на
Отворете терминал и отидете в директорията на сървъра:
cd calculator-server
mvn clean package
mvn spring-boot:runСървърът ще стартира на http://localhost:8080
Трябва да видите изход като:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Отворете нов терминал и отидете в директорията на клиента:
cd calculator-client
mvn clean package
mvn spring-boot:runКлиентът ще се свърже със сървъра, ще извърши изчислението и ще покаже стрийминг резултатите.
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.jarМожете да тествате сървъра и чрез уеб браузър или curl:
Посетете: 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"При стартиране на клиента трябва да видите стрийминг изход, подобен на:
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Събиране (a + b)sub- Изваждане (a - b)mul- Умножение (a * b)div- Деление (a / b, връща NaN ако b = 0)
Параметри:
a(задължителен): Първо число (double)b(задължителен): Второ число (double)op(задължителен): Операция (add,sub,mul,div)
Отговор:
- Content-Type:
text/event-stream - Връща Server-Sent Events с прогреса на изчислението и резултата
Примерна заявка:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Примерен отговор:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Порт 8080 вече е зает
- Затворете други приложения, които използват порт 8080
- Или променете порта на сървъра в
calculator-server/src/main/resources/application.yml
-
Връзката е отказана
- Уверете се, че сървърът работи преди да стартирате клиента
- Проверете дали сървърът е стартирал успешно на порт 8080
-
Проблеми с имената на параметрите
- Този проект включва Maven конфигурация за компилатора с флага
-parameters - Ако имате проблеми с обвързването на параметрите, уверете се, че проектът е компилиран с тази настройка
- Този проект включва Maven конфигурация за компилатора с флага
- Натиснете
Ctrl+Cв терминала, където работи всяко приложение - Или използвайте
mvn spring-boot:stop, ако работят като фонов процес
- Spring Boot 3.3.1 - Фреймуърк за приложения
- Spring WebFlux - Реактивен уеб фреймуърк
- Project Reactor - Библиотека за реактивни потоци
- Netty - Сървър с неблокиращ I/O
- Maven - Инструмент за билдване
- Java 17+ - Програмен език
Опитайте да промените кода, за да:
- Добавите още математически операции
- Включите обработка на грешки при невалидни операции
- Добавите логване на заявки и отговори
- Реализирате автентикация
- Добавите unit тестове
Отказ от отговорност:
Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.