Prueba de streaming bidireccional con gRPC

Resumen

Probar un streaming bidireccional en gRPC requiere ver en acción cómo cliente y servidor intercambian mensajes en tiempo real. Con Postman y un servidor en Go puedes validar este flujo, inspeccionar las respuestas y entender cómo se sostiene la conexión en ambos sentidos.

¿Cómo levantar el servidor gRPC y conectarlo a Postman?

Antes de probar cualquier RPC necesitas tener corriendo el servidor y configurar la herramienta cliente. El proceso es directo si ya tienes el código implementado de clases anteriores.

Para arrancar, ejecuta el servidor con go run servertest/main.go y abre Postman en una pestaña nueva con tipo gRPC. Apunta la conexión a localhost:5070 y activa la reflection del servidor para que Postman cargue automáticamente los métodos disponibles.

¿Qué es la server reflection en gRPC? Es una capacidad que permite a un cliente descubrir los métodos y mensajes que expone un servidor sin necesidad de tener los archivos .proto localmente. Postman la usa para autocompletar las llamadas.

¿Cómo cargar preguntas con un streaming del lado del cliente?

El test con ID T1 ya existe en base de datos, pero no tiene preguntas asociadas. Aquí entra en juego el RPC SetQuestions, que es un client streaming: el cliente envía varios mensajes y el servidor responde una sola vez al final.

Los pasos para poblar el test son:

  1. Invocar SetQuestions desde Postman.
  2. Enviar un primer mensaje con testID = T1 e ID = A1T1.
  3. Enviar un segundo mensaje con ID = A2T1.
  4. Enviar el tercero con ID = A3T1.
  5. Cerrar el stream con end streaming y recibir el OK del servidor.

Con esa secuencia quedan registradas tres preguntas asociadas al test T1, listas para ser consumidas por el siguiente RPC.

¿Cómo funciona Take Test en streaming bidireccional?

El método TakeTest es donde se aprecia realmente la comunicación en ambos sentidos. El servidor envía una pregunta, el cliente responde, y así sucesivamente hasta agotar el cuestionario.

Al invocar TakeTest, Postman recibe inmediatamente la primera pregunta A1T1. Tú generas un mensaje de respuesta, en el ejemplo con el valor 42, y al enviarlo aparece al instante la siguiente pregunta A2T1. Repites el ciclo con A3T1 y al responder la última, la conexión queda esperando. Ahí es cuando cierras manualmente con end streaming.

Esa interacción continua, sin abrir y cerrar conexiones por cada mensaje, es justo lo que diferencia al bidirectional streaming de un RPC tradicional unario.

¿Qué es un streaming bidireccional en gRPC? Es un tipo de RPC donde cliente y servidor mantienen un único canal abierto y se envían mensajes de forma independiente y simultánea, sin esperar turnos estrictos.

¿Dónde se ven las respuestas que envía el cliente?

En la consola del servidor aparecen impresas las respuestas recibidas. Esa impresión ocurre en la línea 156 del código, donde se hace la lectura del mensaje entrante dentro del loop de streaming. Es la prueba tangible de que el servidor está consumiendo en tiempo real lo que el cliente envía.

¿Qué reto puedes implementar para profundizar?

Imprimir las respuestas en consola sirve para validar el flujo, pero queda corto para una aplicación real. Por eso vale la pena llevar el ejercicio un paso más allá.

La propuesta es doble:

  • Almacenar las respuestas del usuario en la base de datos en lugar de solo imprimirlas.
  • Crear un nuevo RPC que devuelva la calificación final obtenida en un test específico, consultando esas respuestas guardadas.

Con esa mejora, el sistema deja de ser una demo y se convierte en algo funcional: un motor de evaluaciones con persistencia y scoring.

¿Qué capacidades habilita el streaming bidireccional?

Lo importante de esta prueba no es solo que funcionó, sino lo que abre. Tener un canal donde ambos lados pueden empujar datos en cualquier momento permite resolver problemas que un request-response simple no cubre bien: chats en vivo, notificaciones, juegos por turnos, evaluaciones interactivas o sincronización de estado entre dispositivos.

Ya viste cómo se comporta el servidor. En la siguiente clase toca el otro lado del puente: cómo se arma un cliente gRPC en código, cómo se construyen los requests y cómo se maneja el streaming desde la perspectiva del consumidor, replicando lo que Postman hace por debajo.

¿Te animas a implementar el reto de calificación? Cuéntame cómo lo resolverías en los comentarios.