Tanto HTTP como 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, después de recibir una solicitud el servidor envía la respuesta al cliente, cada solicitud está asociada con una respuesta correspondiente, después de enviar la respuesta el la conexión se cierra, cada solicitud HTTP o HTTPS establece la nueva conexión al servidor cada vez y después de obtener la respuesta, la conexión se termina por sí misma.
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 los métodos de reconocimiento de tres vías y retransmite los paquetes perdidos.
HTTP puede ejecutarse sobre cualquier protocolo confiable orientado a la conexión, como TCP, 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 obtener 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 requests al servidor se abrirán las 10 conexiones TCP separadas. y cierre después de obtener la respuesta/retroceso.
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 está transfiriendo al servidor. Los encabezados HTTP varían de 200 bytes a 2 KB de tamaño, el tamaño común del encabezado 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 usa 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á viva hasta que cualquiera de las partes (cliente o servidor) la finalice. Después de cerrar la conexión por parte del cliente y el servidor, la conexión finaliza desde ambos extremos.
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 el cliente y el servidor, el cliente-servidor realizó el apretón de manos y decidió crear una nueva conexión y esta conexión se mantendrá vivo hasta que sea extinguido por cualquiera de ellos. Cuando la conexión se establece y está activa, la comunicación se lleva a cabo utilizando el mismo canal de conexión hasta que finaliza.
Así es como después del protocolo de enlace cliente-servidor, el cliente-servidor decide una nueva conexión para mantenerlo vivo, esta nueva conexión se conocerá como WebSocket. Una vez que se establezca el enlace de comunicación y se abra 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 la cierran. La forma en que funciona el socket es ligeramente diferente de cómo funciona HTTP, el código de estado 101 denota el protocolo de conmutación en WebSocket.
Cuándo se puede usar 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/transmiten continuamente a la misma conexión que ya está abierta, por eso WebSocket es más rápido y mejora el rendimiento de la aplicación.
Por ejemplo, en un sitio web de comercio o comercio de bitcoins, para mostrar la fluctuación de precios y los datos de movimiento son empujados continuamente por el servidor backend al extremo del cliente mediante el uso de 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á 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 usan WebSockets para establecer la conexión solo una 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 usar WebSocket: WebSocket se puede usar si queremos cualquier flujo de datos continuo o actualizado en tiempo real que se transmita a través de la red. Si queremos obtener datos antiguos, o queremos obtener los datos solo una vez para procesarlos con una aplicación, debemos utilizar el protocolo HTTP , los datos antiguos que no se requieren con mucha frecuencia o que se obtienen solo una vez se pueden consultar mediante una simple solicitud HTTP, entonces, en este escenario, es mejor no usar WebSocket.
Nota: Los servicios web RESTful son suficientes para obtener los datos del servidor si estamos cargando los datos solo una vez.
Diferencias entre la conexión HTTP y WebSocket:
Conexión WebSocket | Conexión HTTP |
---|---|
WebSocket es un protocolo de comunicación bidireccional que puede enviar los 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 el cliente o el servidor la terminan. | 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 mediante el uso de métodos de solicitud HTTP después de obtener la respuesta. La conexión HTTP se cierra. |
Casi todas las aplicaciones en tiempo real como los servicios (comercio, monitoreo, notificación) usan WebSocket para recibir los datos en un solo canal de comunicación. | La aplicación RESTful simple utiliza el protocolo HTTP que no tiene estado. |
Todas las aplicaciones actualizadas con frecuencia usaban WebSocket porque es más rápido que la conexión HTTP. | Cuando no queremos mantener una conexión por un tiempo determinado o reutilizar la conexión para transmitir datos; Una conexión HTTP es más lenta que WebSockets. |
Nota: Dependiendo de su proyecto, debe elegir dónde será WebSocket o HTTP Connection.
Publicación traducida automáticamente
Artículo escrito por ArpitAsati y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA