Parte 8 — Tiempo real y trabajo en segundo plano#
Cuando la respuesta no cabe en el ciclo petición-respuesta: empujar cambios y hacer trabajo fuera de la petición.
Clases 105 a 113 · 9 en total · 9 construidas · 5 tecnologías en juego.
🧭 De qué va esta parte#
Hasta aquí, todo empezaba con una petición. Nueve clases sobre lo que ocurre cuando no.
Dos familias de problemas que se parecen y no lo son. Tiempo real: el servidor tiene algo que contar y hay que hacérselo llegar a un navegador — con sondeo, con eventos enviados por el servidor o con WebSocket, y cada opción cuesta distinto. Y trabajo en segundo plano: algo tiene que ocurrir, pero no ahora ni dentro de la petición.
Es la parte donde el despliegue deja de ser un detalle: casi todo lo de aquí funciona con una instancia y se rompe con dos. Mantener el estado de una conexión, ejecutar una tarea programada una sola vez o repartir mensajes entre procesos son problemas de arquitectura, no de framework.
🎒 Qué da por sabido#
- Las partes 1 y 2, y la noción de idempotencia de la clase 047.
- Que hay más de una instancia del proceso, o que la habrá.
🎯 Qué sabrás hacer al terminarla#
- Elegir entre sondeo, eventos enviados por el servidor y WebSocket con un criterio, no por costumbre.
- Reconectar sin perder mensajes, y saber qué hace falta guardar para poder reanudar.
- Sacar de la petición el trabajo que no tiene que ocurrir ahora, con reintentos y espera creciente.
- Hacer idempotente un trabajo que se va a reintentar, y explicar qué pasa si no lo es.
- Ejecutar una tarea programada una sola vez aunque haya diez instancias.
- Publicar un evento de dominio y entender qué se gana y qué se pierde al desacoplar.
🧵 Por qué en este orden#
Las cuatro primeras son el canal: sondeo, eventos del servidor, WebSocket y qué pasa cuando se corta.
La quinta es la que rompe todo lo anterior al escalar: el estado de conexión con varias instancias.
Las cuatro últimas son el trabajo diferido: colas, tareas programadas, reintentos y eventos de dominio.
📚 Las clases#
| # | Clase | Qué resuelve | Nivel | Estado |
|---|---|---|---|---|
| 105 | Sondeo | Resolver el caso simple preguntando cada cierto tiempo. | 🟢 introductorio | ✅ Construida |
| 106 | Eventos enviados por el servidor | Empujar en una sola dirección con HTTP normal. | 🟡 intermedio | ✅ Construida |
| 107 | WebSocket | Abrir un canal bidireccional y usarlo bien. | 🟡 intermedio | ✅ Construida |
| 108 | Reconexión y mensajes perdidos | Sobrevivir a un corte sin perder ni duplicar. | 🔴 avanzado | ✅ Construida |
| 109 | Estado de conexión con varias instancias | Difundir a todos los usuarios cuando el servidor no es uno solo. | 🔴 avanzado | ✅ Construida |
| 110 | Colas de trabajo | Sacar de la petición lo que no tiene que ocurrir ahora. | 🟡 intermedio | ✅ Construida |
| 111 | Tareas programadas | Ejecutar trabajo por tiempo, sin que se duplique entre instancias. | 🟡 intermedio | ✅ Construida |
| 112 | Reintentos e idempotencia | Reintentar sin causar daño. | 🔴 avanzado | ✅ Construida |
| 113 | Eventos de dominio | Desacoplar lo que ocurrió de quién reacciona. | 🔴 avanzado | ✅ Construida |
🎬 Las tecnologías que aparecen#
Entre paréntesis, en cuántas clases de esta parte interviene cada una. Estar aquí no es una recomendación: es que el problema de esa clase existe de verdad para esa tecnología.
| Ecosistema | Tecnologías |
|---|---|
| Node.js | Express (9), Socket.IO (3) |
| Python | FastAPI (9) |
| JVM | Spring Boot (9) |
| .NET | ASP.NET Core (6) |
📖 Las palabras que esta parte define#
Sondeo · Eventos enviados por el servidor · WebSocket · Cola de trabajo · Tarea programada · Reintento · Evento de dominio
Todas, con su definición, en el glosario.
✅ Cómo se ejecuta una clase de esta parte#
node scripts/run-class.mjs 105El verificador arranca cada implementación, la somete a su contrato.json y declara cuáles omitió por no encontrar su cadena de herramientas. Si te faltan cadenas, node scripts/doctor.mjs dice cuáles y cómo se instalan.
➡️ Y después#
La parte 9 sale del navegador: la misma aplicación en un móvil, en un escritorio y sin conexión.