logo

¿Qué es el socket web y en qué se diferencia del HTTP?

HTTP y WebSocket son protocolos de comunicación utilizados en la comunicación cliente-servidor.

Protocolo HTTP: HTTP es unidireccional donde el cliente envía la solicitud y el servidor envía la respuesta. Tomemos un ejemplo cuando un usuario envía una solicitud al servidor esta solicitud va en forma de HTTP o HTTPS, luego de recibir una solicitud el servidor envía la respuesta al cliente, cada solicitud se asocia con una respuesta correspondiente, luego de enviar la respuesta la La conexión se cierra, cada solicitud HTTP o HTTPS establece la nueva conexión al servidor cada vez y después de recibir la respuesta, la conexión finaliza por sí sola.
HTTP es un protocolo sin estado que se ejecuta sobre TCP, que es un protocolo orientado a la conexión que garantiza la entrega de la transferencia de paquetes de datos utilizando métodos de protocolo de enlace de tres vías y retransmite los paquetes perdidos.



HTTP puede ejecutarse sobre cualquier protocolo confiable orientado a la conexión, como TCP o SCTP. Cuando un cliente envía una solicitud HTTP al servidor, se abre una conexión TCP entre el cliente y el servidor y después de recibir la respuesta, la conexión TCP finaliza, cada solicitud HTTP abre una conexión TCP separada al servidor, por ejemplo. Si el cliente envía 10 solicitudes al servidor, se abrirán 10 conexiones TCP independientes. y cerrarse después de recibir la respuesta/respaldo.

Información del mensaje HTTP codificada en ASCII, cada mensaje de solicitud HTTP está compuesto por la versión del protocolo HTTP (HTTP/1.1, HTTP/2), métodos HTTP (GET/POST, etc.), encabezados HTTP (tipo de contenido, longitud del contenido), información del host, etc. y el cuerpo que contiene el mensaje real que se transfiere al servidor. Los encabezados HTTP varían de 200 bytes a 2 KB de tamaño, el tamaño común de los encabezados HTTP es de 700 a 800 bytes. Cuando una aplicación web utiliza más cookies y otras herramientas en el lado del cliente que amplían las funciones de almacenamiento del agente, reduce la carga útil del encabezado HTTP.



WebSocket: WebSocket es bidireccional, un protocolo full-duplex que se utiliza en el mismo escenario de comunicación cliente-servidor, a diferencia de HTTP comienza desde ws:// o wss:// . Es un protocolo con estado, lo que significa que la conexión entre el cliente y el servidor se mantendrá activa hasta que cualquiera de las partes (cliente o servidor) la finalice. Después de cerrar la conexión por parte del cliente y del servidor, la conexión finaliza en ambos extremos.

¿Por qué cadena inmutable en Java?

Tomemos un ejemplo de comunicación cliente-servidor, está el cliente que es un navegador web y un servidor, cada vez que iniciamos la conexión entre cliente y servidor, el cliente-servidor realiza el protocolo de enlace y decide crear una nueva conexión y esta conexión se mantendrá viva hasta que sea rescindido por cualquiera de ellos. Cuando la conexión está establecida y activa, la comunicación se realiza utilizando el mismo canal de conexión hasta que se finaliza.

Es así como después del apretón de manos cliente-servidor, el cliente-servidor decide una nueva conexión para mantenerla viva, esta nueva conexión se conocerá como WebSocket. Una vez abierto el establecimiento del enlace de comunicación y la conexión, el intercambio de mensajes se realizará en modo bidireccional hasta que persista la conexión entre cliente-servidor. Si alguno de ellos (cliente-servidor) muere o decide cerrar la conexión, ambas partes cierran la conexión. La forma en que funciona el socket es ligeramente diferente de cómo funciona HTTP; el código de estado 101 indica el protocolo de conmutación en WebSocket.



¿Cuándo se puede utilizar un socket web?

    Aplicación web en tiempo real: la aplicación web en tiempo real utiliza un socket web para mostrar los datos en el extremo del cliente, que el servidor backend envía continuamente. En WebSocket, los datos se envían/empujan continuamente a la misma conexión que ya está abierta, es por eso que WebSocket es más rápido y mejora el rendimiento de la aplicación.
    Por ej. en un sitio web comercial o comercio de bitcoins, el servidor backend envía continuamente los datos de fluctuación de precios y movimiento al cliente mediante un canal WebSocket.
    Aplicación de juegos: en una aplicación de juegos, puede concentrarse en eso, el servidor recibe datos continuamente y, sin actualizar la interfaz de usuario, tendrán efecto en la pantalla, la interfaz de usuario se actualiza automáticamente sin siquiera establecer la nueva conexión, por lo que es muy útil en una aplicación de juegos.
    Aplicación de chat: las aplicaciones de chat utilizan WebSockets para establecer la conexión una sola vez para intercambiar, publicar y transmitir el mensaje entre los suscriptores. Reutiliza la misma conexión WebSocket para enviar y recibir el mensaje y para la transferencia de mensajes uno a uno.

Cuándo no utilizar WebSocket: WebSocket se puede utilizar si queremos flujos de datos continuos o actualizados en tiempo real que se transmitan a través de la red. Si queremos recuperar datos antiguos, o queremos obtener los datos solo una vez para procesarlos con una aplicación, debemos utilizar protocolo HTTP , los datos antiguos que no se requieren con mucha frecuencia o que solo se obtienen una vez se pueden consultar mediante una simple solicitud HTTP, por lo que en este escenario, es mejor no usar WebSocket.

Nota: Los servicios web RESTful son suficientes para obtener los datos del servidor si cargamos los datos solo una vez.

Diferencias entre conexión HTTP y WebSocket:

Conexión WebSocket Conexión HTTP
WebSocket es un protocolo de comunicación bidireccional que puede enviar datos del cliente al servidor o del servidor al cliente reutilizando el canal de conexión establecido. La conexión se mantiene activa hasta que la finaliza el cliente o el servidor. El protocolo HTTP es un protocolo unidireccional que funciona sobre el protocolo TCP, que es un protocolo de capa de transporte orientado a la conexión. Podemos crear la conexión utilizando métodos de solicitud HTTP después de que se cierre la conexión HTTP de respuesta.
Casi todas las aplicaciones en tiempo real, como los servicios (comercio, monitoreo, notificación), utilizan WebSocket para recibir los datos en un único canal de comunicación. La aplicación RESTful simple utiliza el protocolo HTTP que no tiene estado.
Todas las aplicaciones que se actualizan con frecuencia utilizan WebSocket porque es más rápido que la conexión HTTP. Cuando no queremos conservar una conexión durante un período de tiempo determinado o reutilizar la conexión para transmitir datos; Una conexión HTTP es más lenta que WebSockets.

Nota: Dependiendo de tu proyecto tienes que elegir dónde estará WebSocket o Conexión HTTP.