Sockets

``

Conceptos

  • Comunicación en tiempo real bidireccional entre cliente y servidor.
  • Permite actualizaciones instantáneas sin recargar la página.
  • Se utiliza para chat en tiempo real, notificaciones, juegos en línea, colaboración en documentos, etc.
  • Diferencias entre HTTP y WebSockets:
    • HTTP: comunicación unidireccional, cada petición requiere respuesta del servidor.
    • WebSocket: conexión persistente, comunicación continua y eficiente.

Proyectos

  • app de chat ia con agente de gemini
    • Ejemplo práctico de implementación de chat con respuesta automática usando IA.
    • Integración de WebSockets para recibir mensajes en tiempo real.
    • Manejo de eventos: conexión, desconexión, mensajes entrantes y salientes.

Socket.IO

  • Socket.io
  • Documentación oficial: https://socket.io/docs/v4/
  • Librería para Node.js que facilita la implementación de WebSockets.
  • Características:
    • Reconexión automática.
    • Emisión y recepción de eventos personalizados.
    • Soporte de rooms y namespaces para segmentar comunicaciones.
    • Compatible con fallbacks si WebSocket no está disponible (polling).

Ejemplo básico de Socket.IO (Servidor)

const io = require("socket.io")(3000);

io.on("connection", (socket) => {
	console.log("Nuevo cliente conectado:", socket.id);
	socket.on("mensaje", (data) => {
		console.log("Mensaje recibido:", data);
		io.emit("mensaje", data);
	});

	socket.on("disconnect", () => {
		console.log("Cliente desconectado:", socket.id);
	});
});

`

Ejemplo básico de Socket.IO (Cliente)

<script src="/socket.io/socket.io.js"></script>
<script>
	const socket = io("http://localhost:3000");

	socket.on("connect", () => {
		console.log("Conectado al servidor:", socket.id);
	});

	socket.on("mensaje", (data) => {
		console.log("Mensaje del servidor:", data);
	});

	function enviarMensaje(texto) {
		socket.emit("mensaje", texto);
	}
</script>

WebSockets - Cursos y Recursos

  • [Socket.io Curso Práctico de WebSockets, con Socket.io y Nodejs Chat con Socket.io](https://www.youtube.com/watch?v=0wqteZNqruc)
  • ¿Cómo se comunican los programas escritos en lenguajes distintos?
  • Conceptos adicionales:
    • Protocolos subyacentes: WS (WebSocket), WSS (WebSocket seguro).
    • Handshake inicial HTTP para actualizar a WebSocket.
    • Mecanismos de ping/pong para mantener la conexión viva.

      Sockets – Conceptos Avanzados y Temas Complementarios

Arquitectura de Comunicación

  • Modelo cliente-servidor con conexión persistente.
  • Comunicación full-duplex: envío y recepción simultánea de datos.
  • Escalabilidad horizontal mediante balanceadores de carga.
  • Uso de adaptadores (ej. Redis Adapter en Socket.IO) para sincronizar eventos entre múltiples instancias.

WebSocket Protocol

  • Protocolos
  • Basado en RFC 6455.
  • Funciona sobre TCP.
  • Upgrade desde HTTP/1.1 durante el handshake inicial.
  • Menor overhead comparado con polling o long-polling.
  • Frames binarios y de texto para transmisión eficiente.

Seguridad

  • Uso de WSS (WebSocket Secure) con TLS.
  • Autenticación basada en:
    • Tokens JWT enviados en el handshake.
    • Cookies de sesión.
  • Control de autorización por rooms y namespaces.
  • Prevención de ataques:
    • Rate limiting.
    • Validación de payloads.
    • Protección contra conexiones no autorizadas.

Gestión de Conexiones

  • Manejo del ciclo de vida:
    • Conexión.
    • Reintentos y reconexión.
    • Desconexión controlada.
  • Heartbeats (ping/pong) para detectar conexiones caídas.
  • Gestión de usuarios activos y estados online/offline.

Escalabilidad y Rendimiento

  • Uso de Redis, Kafka o RabbitMQ como message brokers.
  • Separación de servicios:
    • Gateway de WebSockets.
    • Servicios de negocio independientes.
  • Optimización:
    • Emisión selectiva de eventos.
    • Compresión de mensajes.
    • Uso de binarios cuando sea necesario.

Patrones de Diseño

  • Patrones de diseño
  • Pub/Sub (Publicador–Suscriptor).
  • Event-Driven Architecture.
  • CQRS aplicado a eventos en tiempo real.
  • Observer pattern aplicado a listeners de eventos.

Casos de Uso Avanzados

  • Dashboards en tiempo real (monitorización, métricas).
  • Sistemas de trading y mercados financieros.
  • Juegos multijugador online.
  • Edición colaborativa (tipo Google Docs).
  • Streaming de eventos IoT.

Alternativas y Comparativas

  • SSE (Server-Sent Events):
    • Comunicación unidireccional.
    • Menor complejidad.
  • gRPC Streaming:
    • Alto rendimiento.
    • Uso frecuente en microservicios.
  • MQTT:
    • Orientado a IoT.
    • Ligero y eficiente.

Testing y Debugging

  • Simulación de múltiples clientes.
  • Uso de logs estructurados para eventos.
  • Herramientas:
    • Postman (WebSocket support).
    • WebSocket King Client.
  • Tests de carga para conexiones concurrentes.

Observabilidad

  • Métricas:
    • Conexiones activas.
    • Eventos por segundo.
    • Latencia.
  • Integración con Prometheus y Grafana.
  • Trazabilidad de eventos distribuidos.

Buenas Prácticas

  • Definir contratos de eventos claros.
  • Versionado de eventos.
  • Manejo de errores explícito.
  • Desacoplar lógica de transporte y lógica de negocio.
  • Documentar eventos y flujos en tiempo real.