Sobes.tech
Junior

¿Para qué se utilizan los sockets en el desarrollo web?

sobes.tech AI

Respuesta de la IA

Para el intercambio bidireccional de datos entre el cliente (navegador) y el servidor en tiempo real. A diferencia del HTTP tradicional, donde el cliente inicia la solicitud y el servidor responde, los sockets permiten que el servidor envíe datos al cliente en cualquier momento sin una solicitud previa.

Ejemplos de uso:

  • Aplicaciones de chat: Entrega instantánea de mensajes entre usuarios.
  • Juegos en línea: Sincronización del estado de los jugadores y del mundo del juego en tiempo real.
  • Plataformas de trading: Actualización de cotizaciones de acciones o criptomonedas sin recargar la página.
  • Notificaciones: Envío de notificaciones push a los usuarios cuando cambia el estado de un pedido, hay un nuevo mensaje, etc.
  • Edición colaborativa de documentos: Sincronización de cambios entre varios usuarios.

Los sockets se implementan sobre el protocolo TCP y generalmente utilizan el protocolo WebSocket, que proporciona una conexión constante entre el cliente y el servidor después del apretón de manos HTTP inicial.

// Ejemplo de código del cliente para establecer una conexión WebSocket
const ws = new WebSocket('ws://localhost:8080'); // Dirección del servidor WebSocket

ws.onopen = () => {
  // Conexión establecida
  console.log('Conexión WebSocket establecida');
  ws.send('¡Hola, servidor!'); // Enviar mensaje al servidor
};

ws.onmessage = (event) => {
  // Mensaje recibido del servidor
  console.log('Mensaje recibido del servidor:', event.data);
};

ws.onclose = (event) => {
  // Conexión cerrada
  if (event.wasClean) {
    console.log(`Conexión cerrada limpiamente, código=${event.code} motivo=${event.reason}`);
  } else {
    console.error('Conexión interrumpida');
  }
};

ws.onerror = (error) => {
  // Error en la conexión
  console.error('Error WebSocket:', error);
};

La conexión WebSocket tiene bajos costos de sobrecarga en comparación con las solicitudes HTTP constantes (sondeo o sondeo largo), lo que la hace más eficiente para aplicaciones que requieren un intercambio frecuente de datos en tiempo real.