Este proyecto demuestra el streaming HTTP usando Server-Sent Events (SSE) con Spring Boot WebFlux. Consta de dos aplicaciones:
- Calculator Server: Un servicio web reactivo que realiza cálculos y transmite resultados usando SSE
- Calculator Client: Una aplicación cliente que consume el endpoint de streaming
- Java 17 o superior
- Maven 3.6 o 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
-
El Calculator Server expone un 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 - Consume la respuesta en streaming
- Imprime cada evento en la consola
- Makes a request to calculate
Abre una terminal y navega al directorio del servidor:
cd calculator-server
mvn clean package
mvn spring-boot:runEl servidor arrancará en http://localhost:8080
Deberías ver una salida similar a:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
Abre una nueva terminal y navega al directorio del cliente:
cd calculator-client
mvn clean package
mvn spring-boot:runEl cliente se conectará al servidor, realizará el cálculo y mostrará los resultados en 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.jarTambién puedes probar el servidor usando un navegador web o curl:
Visita: 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"Al ejecutar el cliente, deberías ver una salida en streaming similar 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 con el progreso del cálculo y el resultado
Ejemplo de Solicitud:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
Ejemplo de Respuesta:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
Puerto 8080 ya está en uso
- Detén cualquier otra aplicación que esté usando el puerto 8080
- O cambia el puerto del servidor en
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:stopsi se está ejecutando como proceso en segundo plano
- Spring Boot 3.3.1 - Framework de aplicación
- Spring WebFlux - Framework web reactivo
- Project Reactor - Biblioteca de streams reactivos
- Netty - Servidor I/O no bloqueante
- Maven - Herramienta de construcción
- Java 17+ - Lenguaje de programación
Intenta modificar el código para:
- Añadir más operaciones matemáticas
- Incluir manejo de errores para operaciones inválidas
- Agregar registro de solicitudes/respuestas
- Implementar autenticación
- Añadir pruebas unitarias
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas derivadas del uso de esta traducción.