Este projeto demonstra streaming HTTP usando Server-Sent Events (SSE) com Spring Boot WebFlux. Ele consiste em duas aplicações:
- Calculator Server: Um serviço web reativo que realiza cálculos e transmite os resultados usando SSE
- Calculator Client: Uma aplicação cliente que consome o endpoint de streaming
- Java 17 ou superior
- Maven 3.6 ou superior
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
-
O Calculator Server expõe um 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 - Consome a resposta em streaming
- Imprime cada evento no console
- Makes a request to calculate
Abra um terminal e navegue até o diretório do servidor:
cd calculator-server
mvn clean package
mvn spring-boot:runO servidor iniciará em http://localhost:8080
Você verá uma saída semelhante a:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Abra um novo terminal e navegue até o diretório do cliente:
cd calculator-client
mvn clean package
mvn spring-boot:runO cliente se conectará ao servidor, realizará o cálculo e exibirá os resultados em 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.jarVocê também pode testar o servidor usando um navegador ou curl:
Acesse: 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"Ao executar o cliente, você deverá ver uma saída em streaming semelhante a:
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 - Retorna Server-Sent Events com o progresso do cálculo e o resultado
Exemplo de Requisição:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Exemplo de Resposta:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Porta 8080 já em uso
- Pare qualquer outra aplicação que esteja usando a porta 8080
- Ou altere a porta do servidor em
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:stopcaso esteja rodando como processo em background
- Spring Boot 3.3.1 - Framework de aplicação
- Spring WebFlux - Framework web reativo
- Project Reactor - Biblioteca de streams reativos
- Netty - Servidor I/O não bloqueante
- Maven - Ferramenta de build
- Java 17+ - Linguagem de programação
Tente modificar o código para:
- Adicionar mais operações matemáticas
- Incluir tratamento de erros para operações inválidas
- Adicionar logging de requisições/respostas
- Implementar autenticação
- Adicionar testes unitários
Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos pela precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.