¿Cómo funcionan los sockets web?

El protocolo WebSocket permite que una solicitud HTTP normal se actualice a una conexión de socket persistente que luego permite la comunicación bidireccional con una sobrecarga muy baja.

Los enchufes han existido desde siempre y son efectivos para permitir la comunicación en tiempo real desde ambos lados del receptáculo. Sin embargo, HTTP es un protocolo que no está diseñado para la comunicación en tiempo real y, en cambio, cada solicitud es efectivamente sin estado. HTTP 1.1 permite que se comparta una única conexión entre múltiples solicitudes, ahorrando así la sobrecarga de establecer una conexión para cada solicitud, sin embargo, no proporciona un mecanismo estándar para que el receptor envíe datos en tiempo real al cliente, o el cliente envíe datos al servidor sin iniciar una nueva solicitud HTTP.

Antes de WebSockets, las personas usaban una serie de estrategias para lograr una conexión pseudo persistente con un servidor como:

  • Sondeo largo XHR: mantenga una conexión abierta esperando una respuesta, una vez que el servidor está listo para enviar datos, envía datos, cierra la conexión y se realiza una nueva conexión nuevamente esperando datos
  • Transmisión XHR: un poco como un sondeo largo, excepto que cada fragmento de datos está enmarcado y la conexión puede permanecer abierta después de enviar los datos.
  • JSONP: probablemente la peor solución, pero sin duda la más amplia admitida, un poco como un sondeo largo de XHR, excepto que el navegador no puede usar un cliente para detectar si la solicitud ha tenido éxito o no. En cambio, cuando el servidor está listo para enviar datos, lo envía envuelto como un Javascript que a su vez invoca una función con la carga útil de datos.

En Ably, una plataforma de mensajería en tiempo real, admitimos WebSockets como un transporte de primera clase, ya que creemos que es el transporte más utilizado y eficiente disponible en la actualidad. Sin embargo, recurrimos a XHR y JSONP en navegadores antiguos o entornos restrictivos.

Si está interesado en cómo se ve una actualización de WebSocket a nivel HTTP, puede ver un ejemplo simple de solicitud de actualización de StackOverflow a continuación:

  OBTENER /? Codificación = texto HTTP / 1.1
 Origen: http://www.websocket.org
 Conexión: actualización
 Anfitrión: echo.websocket.org
 Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ ==
 Actualización: websocketSec-WebSocket-Version: 13

Su cliente envía una solicitud HTTP.

  GET / chat HTTP / 1.1
 Anfitrión: server.example.com
 Actualización: websocket
 Conexión: actualización
 Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw ==
 Sec-WebSocket-Protocol: chat, superchat
 Sec-WebSocket-Version: 13
 Origen: http://example.com

Esto le dice al servidor que el cliente desea actualizar la conexión HTTP al protocolo websocket. Este protocolo está definido por RFC 6455 – El protocolo WebSocket.

Si el servidor lo admite, responde con una respuesta HTTP.

  HTTP / 1.1 101 Protocolos de conmutación
 Actualización: websocket
 Conexión: actualización
 Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk =
 Sec-WebSocket-Protocol: chat

Si no envía esta respuesta, el cliente sabe que el servidor no admite el protocolo websocket.

Si lo hace, el tráfico entre el cliente y el servidor cambia al protocolo websocket.

Puede encontrar más detalles en este excelente artículo de Wikipedia, WebSocket

WebSocket (WS) es un protocolo y una API. Es un protocolo que significa que está diseñado para usarse entre 2 nodos distribuidos en una red, específicamente a través de la web. Es un protocolo de igual a HTTP; tanto HTTP como WS se implementan con TCP. El IETF tiene un estándar formal para el protocolo WS: RFC 6455 – El protocolo WebSocket El W3C tiene un estándar para la API WS de JavaScript: la API WebSocket. Por cierto, el W3C solo describe un estándar API de JavaScript. Otros lenguajes como Java, C #, C / C ++, Android, iOS, etc., reflejan este estándar lo mejor posible.

Normalmente, WS se utiliza en la comunicación entre el navegador y el servidor. Sin embargo, similar al aumento en el uso de HTTP para el uso sin navegador para las API REST web, WS se puede usar para las API de transmisión que deben ser amigables para la web pero no necesariamente llamadas desde un navegador.

More Interesting

¿Cuál es el alcance futuro de la visión por computadora?

¿Cuáles son algunos sitios web realmente buenos donde uno puede aprender piratería ética de forma gratuita?

¿Cómo configuro una ubicación personalizada / simulada en Android?

¿Qué es 'nulo'?

¿Los satélites pierden alguna vez la conexión en el espacio? ¿Cómo se 'reconecta' la NASA cuando lo hacen?

¿Cómo puedo escribir un script de shell para recuperar texto que se encuentra entre dos cadenas?

¿Qué son "hilos sin peso" y cómo los implemento? ¿Cuáles son las ventajas de usarlos?

Soy gerente de producto no técnico en una empresa de tecnología empresarial. Teniendo en cuenta que la mayoría de los puestos de PM en estos días requieren algunas habilidades técnicas, quiero obtener una mejor comprensión de los roles que juegan los ingenieros de software en las empresas tecnológicas. ¿Dónde comenzaría uno? ¿Debo familiarizarme con lenguajes de programación específicos? ¿O centrarse más en el proceso de cómo se desarrolla el software?

¿Cuál es la mejor manera de prepararse para varias competiciones CTF?

¿Qué importancia tienen las ecuaciones diferenciales parciales para la robótica?

¿Alguno de los IIT ofrece cursos de ingeniería inversa y desarrollo de exploits?

¿Hay alguna forma de convertir una aplicación existente a VR? ¿Alguien ha encontrado una aplicación de compras con el uso de la tecnología VR?

¿Cuál es el campo de CS que ahora tiene la mayor tracción o tendrá demanda en la próxima década?

¿Cuál es el uso más interesante del aprendizaje automático que has visto?

¿Cuál es la mejor plataforma que es segura, escalable e integrable para construir bots de chat?