Proyecto gRPC con streaming bidireccional

Resumen

¿Alguna vez quisiste construir un sistema donde clientes y servidores conversen en tiempo real, enviando datos sin parar hasta cerrar la comunicación? Eso es justo lo que vas a lograr con este proyecto gRPC con streaming para gestionar alumnos, exámenes y preguntas.

¿Qué vas a construir en este proyecto de servicios con streaming?

La idea es crear varios servicios que se comuniquen entre sí para registrar alumnos, crear exámenes, asociar preguntas a esos exámenes y permitir que los alumnos inscritos los presenten. Todo esto lo vas a explorar primero en Postman para entender las funcionalidades antes de programarlas [0:24].

¿Qué es gRPC streaming? Es una forma de comunicación donde cliente y servidor envían múltiples mensajes a través de una misma conexión abierta, en lugar de hacer una sola petición y recibir una sola respuesta.

¿Cómo se registran y leen alumnos en el servidor?

El primer servicio te permite crear un alumno enviando tres datos básicos: una edad, un id y un nombre. Por ejemplo, puedes registrar a un estudiante con edad 25, id S25 y nombre Test Student [1:05].

Una vez creado, puedes leer ese alumno enviando únicamente su id. El servidor responde con la información completa del estudiante registrado. Esto te da una operación de escritura y otra de lectura, sencillas y directas.

¿Cómo funciona la creación de exámenes?

Del mismo modo que con los alumnos, vas a tener funcionalidades para crear tests. Cada examen lleva un id, por ejemplo T25, y un nombre como Test Exam [1:38].

Guardas el test y luego lo recuperas enviando ese mismo id. Aquí ya empiezas a ver el patrón: cada entidad del sistema tiene su par de operaciones de creación y lectura.

¿Cómo se envían preguntas usando streaming en gRPC?

Aquí empieza lo interesante. Para crear preguntas asociadas a un examen específico, no envías una sola petición, sino un streaming de datos. Mandas el id del test (T25) junto con varias preguntas y respuestas, una tras otra, manteniendo la conexión abierta [2:12].

  • Generas una pregunta y la envías.
  • Generas otra con el mismo id de test y la envías.
  • Repites el proceso tantas veces como necesites.
  • Finalizas el streaming y el servidor devuelve un ok confirmando que todo se almacenó correctamente.

Este flujo es distinto a una llamada tradicional porque el servidor está recibiendo datos de forma continua y los va guardando en la base de datos a medida que llegan.

¿Para qué sirve el streaming en este proyecto? Permite que el cliente envíe múltiples preguntas o respuestas en una sola sesión abierta, sin abrir y cerrar conexión por cada mensaje. Es más eficiente cuando hay flujos largos de datos.

¿Cómo se inscriben alumnos en un examen?

La inscripción también usa streaming. Envías el id del alumno (S25) indicando que formará parte del test T25, lo mandas como flujo de datos y luego cierras la comunicación [2:54].

Después puedes pedirle al servidor que te devuelva qué alumnos están inscritos en un examen específico. Si invocas el método con T25, te responde con la lista, que en este caso contiene únicamente a Test Student.

¿Cómo se realiza un examen con comunicación bidireccional?

La funcionalidad de presentar un test lleva el streaming un paso más allá. Cuando invocas este método, el servidor te va enviando las preguntas una a una, y tú vas respondiendo en tiempo real desde el cliente [3:28].

Al terminar, cierras el streaming y finaliza la interacción. Aquí cliente y servidor están comunicándose ambos por streaming, no solo uno de los dos. Esto es lo que se conoce como streaming bidireccional.

¿Por qué este proyecto lleva tu aplicación a otro nivel?

Integrar streaming de datos en una aplicación significa que dejas de pensar en peticiones aisladas y empiezas a pensar en flujos continuos de información. Eso cambia la forma en que diseñas tanto el cliente como el servidor.

En las próximas clases vas a ir construyendo cada una de estas piezas. El siguiente paso es entender los protobuffers: qué son, para qué sirven y cómo te ayudan a generar código que conecte cliente y servidor de forma consistente [4:18].

¿Qué parte del proyecto te genera más curiosidad: el streaming de preguntas o la inscripción de alumnos? Cuéntalo en los comentarios.