Saltar al contenido
0%

Qué es un WebSocket y cómo funciona

Alchemy team headshot

Escrito por Alchemy

Publicado el 20 de junio de 20225 min de lectura

WebSocket es un protocolo de comunicación bidireccional basado en TCP que estandariza la comunicación entre un cliente y un servidor, permitiendo que ambas partes soliciten datos entre sí. En cambio, un protocolo unidireccional como HTTP solo permite que el cliente solicite datos al servidor.

Una conexión WebSocket entre un cliente y un servidor puede permanecer abierta durante todo el tiempo que ambas partes deseen mantenerla, permitiendo una comunicación continua.

Con HTTP, cada conexión comienza cuando el cliente hace una solicitud y termina cuando la solicitud se cumple.

Los WebSockets pueden ser superiores para las notificaciones de dApps de Web3 porque permiten notificaciones en tiempo real para eventos críticos de forma continua, en comparación con requerir solicitudes individuales. Herramientas como Alchemy Notify hacen simple agregar notificaciones en tiempo real a wallets y apps.

¿Qué es WebSocket?

WebSocket es un protocolo de comunicación bidireccional que permite sesiones de comunicación interactivas entre un cliente y un servidor. Está basado en TCP y suele usarse para apps y servicios que quieren capacidades de notificación en tiempo real.

¿Qué es un servidor WebSocket?

Un servidor WebSocket es una aplicación que escucha en un puerto TCP, siguiendo un protocolo específico. WebSocket es un protocolo de comunicación bidireccional entre un cliente y un servidor, que permite que ambos soliciten y envíen datos entre sí.

En cambio, HTTP es un protocolo de comunicación unidireccional, donde el cliente solo puede enviar solicitudes al servidor y el servidor solo puede enviar datos de vuelta en respuesta; en una relación HTTP, el servidor nunca puede solicitar datos al cliente.

¿Qué es una conexión WebSocket?

Una conexión WebSocket es una conexión continua entre el cliente y el servidor. En cambio, las conexiones HTTP son de una sola vez. La conexión comienza con cada solicitud que hace el cliente al servidor y termina con la respuesta del servidor. Las conexiones WebSocket pueden mantenerse abiertas durante todo el tiempo que el cliente y el servidor deseen, lo que significa que los datos pueden fluir a través de ese WebSocket mientras ambas partes lo deseen, todo a partir de una solicitud inicial.

¿Qué protocolo usa WebSocket?

WebSocket usa el protocolo WS, que está basado en el Transmission Control Protocol (TCP). Es una red orientada a conexión, lo que significa que primero debe establecerse una conexión entre los participantes para enrutar los datos hacia la ubicación correcta.

En cambio, el Internet Protocol determina hacia dónde se envían los datos según la información dentro de ese paquete de datos; no se requiere una configuración previa para enrutar el paquete.

¿Qué es una WebSocket API?

Hay dos formas en que un servidor puede enviar datos a un cliente. El cliente puede solicitar datos al servidor de forma regular, lo que se conoce como polling, o el servidor puede enviar datos automáticamente al cliente, lo que se conoce como server push.

Las WebSocket APIs aprovechan la conexión entre el cliente y el servidor manteniéndola abierta después de la solicitud inicial para usar la técnica de server push, eliminando la carga de infraestructura que genera que los clientes hagan polling constantemente al servidor en busca de nuevas actualizaciones.

¿Cómo funcionan los WebSockets?

Los WebSockets son un método de comunicación bidireccional, que permite múltiples respuestas a partir de una única solicitud al servidor. Los WebSockets también se usan mayormente para comunicación cliente-servidor, mientras que los webhooks se usan mayormente para comunicación servidor-servidor.

¿En qué se diferencia el funcionamiento de los WebSockets del de los webhooks?

A diferencia de los WebSockets, los webhooks, que usan HTTP, son estrictamente unidireccionales: el servidor solo responde a las aplicaciones cuando se hace una solicitud, y cada vez que se cumple una solicitud, la conexión se termina.

Alchemy Notify usa webhooks para comunicarse entre servidores y WebSockets para enviar las notificaciones que ve el usuario de la dApp.

¿Para qué se usan los WebSockets de Web3?

La Subscription API de Alchemy proporciona dos nuevos métodos de API que extienden la funcionalidad de la API original de Ethereum - eth_subscribe y eth_unsubscribe - que permiten a los desarrolladores de Web3 usar WebSockets para recibir información o datos de forma continua, como obtener información de transacciones pendientes, hashes de transacciones pendientes, nuevos bloques de encabezado y logs.

Estos son los métodos compatibles de la Subscription API de Alchemy que usa WebSockets:

  • alchemy_newFullPendingTransactions - devuelve la información completa de la transacción (no solo los hashes de transacción) de todas las transacciones que se agregan al estado pendiente
  • ​​alchemy_filteredNewFullPendingTransactions - devuelve la información de la transacción de todas las transacciones pendientes que coinciden con un filtro de dirección de origen o destino
  • newPendingTransactions - devuelve el hash de todas las transacciones que se agregan al estado pendiente, independientemente de si las enviaste o no
  • newHeads - envía un evento cada vez que se agrega un nuevo encabezado (bloque) a la blockchain
  • logs - envía logs que forman parte de bloques recién agregados que coinciden con los criterios de filtro especificados

Cuando sea necesario terminar una conexión WebSocket existente, se puede usar la llamada eth_unsubscribe junto con el parámetro de ID de suscripción.

Cuándo usar WebSockets vs. webhooks

El equilibrio entre usar WebSockets o webhooks depende de si el diseño de tu infraestructura puede manejar mejor muchas conexiones WebSocket abiertas de forma concurrente frente a muchas solicitudes de conexión webhook de clientes.

Si tu aplicación de servidor se ejecuta como una función en la nube (AWS Lambda, Google Cloud Functions, etc.), usa webhooks, porque la aplicación no mantendrá abiertas las conexiones WebSocket.

Si la cantidad de notificaciones enviadas es baja, los webhooks también son superiores porque las conexiones se inician únicamente bajo la condición de que ocurra un evento.

Si el evento es poco frecuente, es mejor usar webhooks que mantener abiertas muchas conexiones WebSocket entre el cliente y el servidor.

Por último, también importa si se está tratando de conectar un servidor con otro servidor o un cliente con un servidor; los webhooks son mejores para lo primero, los WebSockets para lo segundo. Creamos un repo de Github para configurar un servidor de webhooks.

Cuándo usar el protocolo WebSocket

Para muchas apps de Web3, es obligatorio actualizar a los usuarios en tiempo real sobre el estado de sus transacciones. De lo contrario, pueden tener una mala experiencia de usuario y abandonar tu app o servicio. Alchemy Notify resuelve esto informando a los usuarios el estado exacto de sus transacciones.

Cuándo usar WebSockets en lugar de HTTP

Los WebSockets deben usarse en lugar de solicitudes HTTP siempre que la latencia deba ser la menor posible, para que los usuarios reciban notificaciones sobre eventos tan pronto como ocurren. HTTP es comparativamente mucho más lento porque el cliente está limitado en la frecuencia con la que puede recibir actualizaciones, según la frecuencia con la que envía solicitudes.

Ejemplos de WebSocket

Creamos guías sobre cómo implementar Alchemy Notify para enviar notificaciones dentro de la app que informen a tus usuarios sobre eventos críticos, como cuando cambia el saldo de su wallet. Aquí hay algunos tutoriales que hemos publicado:

  1. Seguimiento de transacciones de Ethereum pendientes y minadas
  2. Cómo construir una dApp con notificaciones de transacciones en tiempo real
  3. Integración de webhooks de Alchemy con Zapier

Alchemy Notify incluso se puede usar para enviar notificaciones por correo electrónico a los usuarios de tu dApp, evitando la frustración sobre el estado de sus transacciones.

Background gradient

Construye magia blockchain

Alchemy combina los productos y herramientas de desarrollo Web3 más potentes con recursos, comunidad y un soporte legendario.