¿Qué es WebSocket?
Imagínese escribiendo un correo electrónico a un amigo o colega. Siempre comienza con Hola, seguido del contexto y termina con un Gracias. Ahora imagine lo mismo que usted y su amigo / colega teniendo una conversación cara a cara. ¿Seguirías comenzando cada uno de tus mensajes con Hola y terminarías con Gracias? Un gran NO, ¿verdad? Eso prácticamente resume HTTP y WebSocket.
Comprensión técnica de WebSocket
Un WebSocket es un protocolo de comunicación bidireccional. Proporciona una conexión dúplex completa. Permítanos entender cómo estos términos son significativos.
Mirando hacia atrás a nuestro ejemplo de correos electrónicos y conversaciones cara a cara, los correos electrónicos significan el protocolo HTTP, mientras que las conversaciones cara a cara significan el protocolo WebSocket. Esto no significa que los correos electrónicos se envíen a través del protocolo HTTP, no. Los correos electrónicos utilizan principalmente protocolos SMTP, pero no nos preocupemos por eso por ahora. La conclusión esencial del ejemplo es la apertura y cierre de la conexión subyacente entre las dos partes que intercambian información.
HTTP intercambia información abriendo una nueva conexión en cada ciclo de solicitud-respuesta. Por lo tanto, cada vez que envía una solicitud o recibe una respuesta, HTTP establece una nueva conexión. Piense en una conexión como simplemente una línea segura para transferir información. Tan pronto como se entregue su información, HTTP cierra la conexión.
WebSocket mantiene la conexión abierta para que pueda intercambiar información a través de la misma línea hasta que uno de ustedes cierre la conexión.
Un poco más técnico …
De acuerdo, lo entiendo todo sobre la conexión que se deja abierta. ¿Cómo me ayuda esto? No siento ninguna diferencia si estoy enviando correos electrónicos o mensajes de chat.
Tienes razón. Como usuario final, la diferencia no es visible para usted. Pensemos como un desarrollador de aplicaciones. Cuando digo abrir una línea segura para el intercambio de información, hay un proceso involucrado en ello. Esto se conoce comúnmente como apretón de manos. Este es un proceso por el cual ambas máquinas involucradas en una conversación acuerdan abrir un puerto para enviar y recibir información. Ahora, estos puertos están bloqueados entre sí y no se pueden usar para una tercera máquina.
Para el protocolo de enlace, el protocolo HTTP envía y recibe algunos bytes adicionales solo para confirmar si un puerto está libre tanto en las máquinas como para obtener los detalles del puerto. Estos bytes adicionales son una sobrecarga cuando se requiere el intercambio frecuente de información. Por lo tanto, WebSocket.
¿Cuándo usar WebSocket y cuándo no?
De lejos, es evidente que WebSocket es útil solo cuando se requiere el intercambio frecuente de información. WebSocket proporciona una conexión dúplex. Esto significa que la información se puede enviar y recibir al mismo tiempo. Obviamente, esto tiene el costo de bloquear el puerto hasta que se intercambia la información de tiempo. Por lo tanto, usar WebSocket es una compensación entre guardar bytes cruciales y permitir conversaciones más rápidas a costa de bloquear un puerto durante más tiempo.
El mejor caso de uso de WebSocket es cuando necesita datos en tiempo real realmente rápidos, como los precios de las acciones. Los precios de las acciones cambian cada segundo. Por lo tanto, el uso de HTTP desperdiciaría un tiempo crucial en un apretón de manos innecesario y las citas se volverían obsoletas. En su lugar, use WebSocket y hágalo más rápido.
Por el contrario, si puede permitirse un retraso de unos pocos milisegundos en la información que busca, debe optar por HTTP.
¿Cómo nació WebSocket?
En sus primeros días, Internet era una red gigante de páginas que contenían información textual. Estas eran principalmente páginas estáticas, lo que significaba que la información era constante y no variaba con las recuperaciones posteriores. Con el tiempo, el contenido rico, como las imágenes, se convirtió en una parte indispensable de las páginas web. Las páginas también se volvieron dinámicas, lo que significaba que ahora la información en las páginas podría generarse en base a consultas.
Esto condujo al avance de las tecnologías con la invención de HTML dinámico, JavaScript, etc. Todos ellos eran muy avanzados pero usaban protocolos HTTP. El problema con los protocolos HTTP: la conexión no era dúplex. La comunicación fue unidireccional. En cualquier momento, el cliente puede enviar una solicitud al servidor o el servidor puede responder.
Esto dio paso a los protocolos WebSocket que permiten una conexión full-duplex para mejorar la experiencia del usuario.
Comprender el término 'Full-Duplex'
Nos hemos encontrado con el término full-duplex bastante. ¿Qué significa esto realmente?
En HTTP, la solicitud siempre es iniciada por el cliente. Esto significa que a menos que el cliente envíe una solicitud, el servidor no responderá. Esto hace que la comunicación sea unidireccional.
Mientras está en WebSocket, tanto el cliente como el servidor pueden enviar mensajes entre sí al mismo tiempo. El cliente no necesita hacer una solicitud cada vez que requiere alguna respuesta. Esto hace que la conexión sea bidireccional.
Ahora para lograr la bidireccionalidad, uno debe pensar que hay dos conexiones mantenidas en cada punto del tiempo. Aquí es donde WebSocket es diferente. WebSocket hace esto a través de una única conexión TCP. Esto se denomina una conexión full-duplex, lo que significa comunicación bidireccional en un solo canal.
Atributos, eventos y métodos de WebSocket
Creemos una conexión WebSocket. El siguiente comando hace esto por nosotros:
Var Socket = nuevo WebSocket (URL, (protocal));
El nuevo método WebSocket es el método API expuesto que devuelve una conexión establecida con la URL especificada como primer parámetro y que se adhiere a un parámetro de protocolo opcional.
1. Atributos
Una vez que se establece la conexión, tenemos los siguientes atributos en nuestro objeto Socket:
yo. Socket.readyState
Un atributo de solo lectura que indica el estado de la conexión.
0 - La conexión aún no se ha establecido.
1 - Se establece la conexión y es posible la comunicación.
2 - La conexión está pasando por un apretón de manos.
3 - La conexión se ha cerrado o no se pudo abrir.
ii) Socket.bufferedAmount
Un atributo de solo lectura que indica la cantidad de bytes que se ponen en cola usando el método send ().
2. Eventos
yo. Socket.onOpen
Un evento desencadenado cuando se abre una conexión.
ii) Socket.onMessage
Un evento desencadenado cuando el cliente recibe un mensaje del servidor.
iii) Socket.onError
El evento provocó un error en la comunicación.
iv. Socket.onClose
El evento se dispara cuando se cierra una conexión.
3. Métodos
yo. Socket.send (datos)
El método de envío transmite los datos mediante la conexión.
ii) Socket.close ()
Este método termina la conexión existente.
Ejemplo
var socket = new WebSocket(“ ws://echo.websocket.org ”);
if (socket.readyState === WebSocket.OPEN)(
socket.send(“Hello World”);
)
if (socket.readyState === WebSocket.OPEN)(
socket.close( );
)
Ejemplo del mundo real
StackOverflow es un sitio web muy popular que utiliza WebSocket para enviar notificaciones cada vez que hay una nueva respuesta disponible para la pregunta.
Artículo recomendado
Esta ha sido una guía de ¿Qué es WebSocket? Aquí discutimos los conceptos, la definición, los atributos de WebSocket, los eventos y los métodos de WebSocket. También puede consultar nuestros otros artículos sugeridos para obtener más información:
- ¿Hadoop es de código abierto?
- ¿Qué es la herencia de Java?
- ¿Qué es Multithreading en C #?
- ¿Qué son los servicios web ASP.Net?
- Creación y métodos de subprocesamiento múltiple en C #