¿Qué es Websocket?
Los websockets son una especie de tecnología PUSH que permite la comunicación bidireccional a través de un solo socket (TCP). Es un protocolo que utiliza un solo socket TCP para proporcionar canales de comunicación bidireccionales y dúplex completos. Fue creado pensando en servidores y navegadores web, pero puede ser utilizado por cualquier programa cliente o servidor.
Los mensajes entre el cliente y el servidor se representan en el diagrama. Websockets usa mensajes de protocolo de enlace para establecer o abrir conexiones, mientras que HTTP usa el mecanismo de mensajería de solicitud-respuesta. Los websockets son full-duplex, mientras que HTTP es half-duplex.
Es un protocolo que permite a los programadores crear una conexión permanente entre un cliente y un servidor y enviar datos en tiempo real. Los mensajes se pueden transmitir entre los sockets TCP de una sola conexión (simultáneamente o de ida y vuelta).
¿Cuál es el propósito de WebSocket?
Las limitaciones de la tecnología basada en HTTP fueron la inspiración que provocó el desarrollo de WebSockets. Un cliente solicitará un recurso mediante HTTP, mientras que el servidor responderá con los detalles. HTTP es un protocolo unidireccional, lo que significa que todos los datos enviados desde el servidor al cliente deben solicitarse primero.
Históricamente, se ha utilizado el sondeo largo para eludir esta restricción. El sondeo prolongado es cuando un cliente envía una solicitud HTTP con un tiempo de espera prolongado y el servidor usa el tiempo de espera para enviar datos al cliente. El sondeo largo funciona, pero tiene un inconveniente: ocupa los recursos del servidor durante la duración del sondeo largo, aunque no haya datos disponibles para enviar.
WebSockets, por el contrario, permite la transmisión de datos basados en mensajes de manera similar a UDP pero con la seguridad de TCP. WebSocket usa HTTP como método de transporte inicial, pero deja el enlace TCP abierto después de recibir la respuesta HTTP para que los mensajes se puedan enviar entre el cliente y el servidor. Los WebSockets nos permiten crear aplicaciones en “tiempo real” sin requerir el uso de polinización prolongada.
Ventajas de WebSocket
- Permite la comunicación bidireccional.
- Websockets le permite enviar y recibir datos mucho más rápido que HTTP. También son más rápidos que AJAX.
- Comunicación entre orígenes (sin embargo, esto presenta riesgos de seguridad).
- Compatibilidad entre plataformas (web, escritorio, móvil)
- HTTP tiene una sobrecarga de 2000 bytes, pero WebSocket solo tiene un costo de 2 bytes.
- Se reemplaza el sondeo largo.
- Las llamadas AJAX solo pueden enviar tipos de datos de cadena porque los WebSockets tienen tipos de datos.
Contras de WebSocket
- Se requiere un navegador web totalmente compatible con HTML5.
- Los mecanismos de éxito similares a AJAX no están disponibles en Websockets.
- Los websockets, a diferencia de HTTP, no proporcionan almacenamiento en caché intermedio/perimetral.
- Es imposible emplear estados HTTP amigables, cuerpos y otros elementos para crear incluso un protocolo simple propio.
- HTTP es significativamente más fácil de desarrollar si su aplicación no requiere mucha interacción dinámica.
Ventajas de EventSource:
- Es ideal para situaciones a prueba de fallas. Si la fuente descendente falla, el almacén de eventos se puede usar para volver a ensamblar los datos.
- Extremadamente adaptable Se puede guardar cualquier tipo de mensaje. Siempre que se permitan las credenciales de acceso adecuadas, cualquier cliente puede acceder a la tienda de eventos.
- Cuando se combina con un agente de mensajes basado en eventos como Kafka, es ideal para informes de datos en tiempo real.
- Las instancias de entidad generalmente se representan como un objeto mutable en la memoria y una fila modificable en una tabla de base de datos relacional en el estilo CRUD clásico: el famoso desajuste de impedancia relacional de objeto resulta como resultado de esto. Los mapeadores relacionales de objetos se construyeron para cerrar esta brecha, pero vienen con su propio conjunto de complicaciones. La base de datos se trata como un registro de solo anexar de eventos serializados en la arquitectura de origen de eventos. No intenta modelar directamente el estado de cada entidad o sus relaciones en el esquema de la base de datos. El código para escribir y leer desde la base de datos se simplifica sustancialmente como resultado de esto.
- Los eventos almacenados contienen la historia de cómo una entidad llegó a estar en su estado actual. Debido a que los datos transaccionales y de auditoría son los mismos, no hay necesidad de preocuparse por la inconsistencia.
- Ahora puede evaluar el flujo de eventos y extraer información comercial valiosa, posiblemente información que no se consideró cuando se planificaron los eventos. Puede expandir la actividad de su sistema agregando nuevas vistas sin complicar el lado de escritura.
- Debido a que todos los eventos simplemente se agregan al almacenamiento de datos, aumenta el rendimiento de escritura. No se han realizado cambios, y no se han realizado eliminaciones.
- Los sistemas controlados por eventos son fáciles de probar y solucionar problemas. Por motivos de prueba, se pueden emular comandos y eventos. El registro de eventos es una herramienta útil para la depuración. Si se descubre un problema en producción, puede usar un entorno controlado para reproducir el registro de eventos y descubrir cómo un objeto llegó a una condición problemática.
Contras de EventSource:
- Dada la sensibilidad temporal intrínseca del patrón y la susceptibilidad a posibles problemas de latencia, requiere una infraestructura de red extremadamente eficiente.
- Requiere un método confiable para controlar los formatos de mensajes, como un registro de esquema.
- Las cargas útiles variarán según el evento. Para definir y establecer formatos de mensajes para un evento determinado, debe haber una única fuente de verdad.
Conclusión
La clasificación de WebSockets como el modelo para el envío de datos y la comunicación en tiempo real es algo inapropiado en la web tal como se describe hoy en día. Independientemente de algunas resoluciones de código abierto, los WebSockets son solo una parte del rompecabezas cuando se desarrollan aplicaciones en tiempo real.
Hay una gran cantidad de problemas operativos con los que se puede encontrar un desarrollador cuando usa WebSockets como su solución en tiempo real, particularmente a medida que la aplicación escala y la base de usuarios crece en tecnología como: Firewalls, topología de red, pruebas de carga y seguridad.