CodeForge

React 19 de Cero a Experto / Tiempo real y sistemas distribuidos

Socket.io: WebSockets listos para producción

Teoría22 min20 XP

Socket.io es la librería estándar para tiempo real en el mundo Node/React. Toma el WebSocket nativo —con todas sus limitaciones— y le agrega lo que falta para producción: reconexión automática, fallback cuando la red bloquea WebSockets, EVENTOS CON NOMBRE (en vez de un canal crudo), salas para agrupar usuarios, y confirmaciones. Hoy dominas su modelo mental: emitir y escuchar eventos nombrados, en cliente y servidor.

El operador de la centralita

Conectar y los eventos con nombre

En el cliente, io(url) abre la conexión. Lo central de Socket.io: en vez de un onmessage genérico, emites y escuchas eventos CON NOMBRE, como un EventEmitter (SC-02, el pub/sub):

socketio-cliente.tsx
import { io } from "socket.io-client";

// conectar (io se encarga de reconexión, fallback, etc.)
const socket = io("https://servidor.com");

// eventos del ciclo de vida
socket.on("connect", () => console.log("Conectado, id:", socket.id));
socket.on("disconnect", () => console.log("Desconectado"));

// ESCUCHAR eventos con nombre (lo que el servidor emite)
socket.on("mensaje", (msg: { usuario: string; texto: string }) => {
console.log(`${msg.usuario}: ${msg.texto}`);
});
socket.on("usuario_escribiendo", (nombre: string) => {
mostrarIndicador(nombre);
});

// EMITIR eventos con nombre (lo que el cliente manda)
function enviar(texto: string) {
socket.emit("mensaje", { usuario: "Sara", texto });
// ¡sin JSON.stringify! Socket.io serializa por ti
}

Fíjate en las mejoras sobre el nativo: io(url) maneja la reconexión y el fallback solo; los mensajes son EVENTOS NOMBRADOS (socket.on("mensaje"), socket.on("usuario_escribiendo")) en vez de un onmessage crudo con un switch sobre tipo; y Socket.io SERIALIZA los datos por ti (envías objetos directo, sin JSON.stringify). El modelo es el pub/sub que ya conoces del SC-02: on para suscribirte a un evento, emit para publicarlo.

La simetría cliente/servidor

Una nota sobre este módulo

¿Qué añade Socket.io sobre el WebSocket nativo y cómo se comunican cliente y servidor?

Mini-reto

Diseña el vocabulario de eventos de un chat con Socket.io (en papel): 1) lista los eventos que EMITE el cliente ("mensaje", "escribiendo") y los que ESCUCHA ("mensaje", "usuario_entra", "usuario_sale"); 2) para cada uno, di qué datos lleva; 3) describe qué hace el servidor al recibir un "mensaje" del cliente (pista: io.emit("mensaje", ...) para repartirlo a todos). Nota cómo cliente y servidor comparten los nombres de eventos.

Qué sigue

Ya tienes el modelo de Socket.io. Ahora, lo específico de React: una conexión es un recurso vivo que debe abrirse y CERRARSE bien —un useEffect con su cleanup— y conviene empaquetarla en un custom hook. La próxima lección integra el socket en React con un useSocket propio, corriendo en vivo con el socket simulado.