Diferencias entre sockets TCP y web sockets, una vez más [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Tratando de entender lo mejor posible las diferencias entre TCP socket y websocket, ya he encontrado mucha información útil dentro de estas preguntas:

Y así sucesivamente...

En mis investigaciones, pasé por esta frase en wikipedia :

Websocket se diferencia de TCP en que habilita un flujo de mensajes en lugar de un flujo de bytes

No estoy totalmente seguro de lo que significa exactamente. ¿Cuáles son sus interpretaciones?

Author: kanaka, 0000-00-00

2 answers

Cuando envía bytes desde un búfer con un socket TCP normal, la función send devuelve el número de bytes del búfer que se enviaron. Si es un socket sin bloqueo o un envío sin bloqueo, el número de bytes enviados puede ser menor que el tamaño del búfer. Si es un socket de bloqueo o un envío de bloqueo, entonces el número devuelto coincidirá con el tamaño del búfer, pero la llamada puede bloquearse. Con WebSockets, los datos que se pasan al método send siempre se envían como un "mensaje" completo" o no en absoluto. Además, las implementaciones WebSocket del navegador no se bloquean en la llamada de envío.

Pero hay diferencias más importantes en el lado receptor de las cosas. Cuando el receptor hace un recv (o lectura) en un socket TCP, no hay garantía de que el número de bytes devueltos corresponda a un solo envío (o escritura) en el lado del remitente. Puede ser lo mismo, puede ser menos (o cero) e incluso puede ser más (en cuyo caso se reciben bytes de múltiples envíos/escrituras). Con WebSockets, el la recepción de un mensaje está impulsada por eventos (generalmente registra una rutina de manejador de mensajes), y los datos en el evento siempre son el mensaje completo que el otro lado envió.

Tenga en cuenta que puede hacer comunicación basada en mensajes usando sockets TCP, pero necesita alguna capa/encapsulación adicional que agregue datos de encuadre/límite de mensajes a los mensajes para que los mensajes originales puedan ser re-ensamblados a partir de las piezas. De hecho, WebSockets está construido sobre sockets TCP normales y utiliza encabezados de marco que contiene el tamaño de cada fotograma e indica qué fotogramas son parte de un mensaje. La API WebSocket vuelve a ensamblar los trozos TCP de datos en marcos que se ensamblan en mensajes antes de invocar el controlador de eventos de mensajes una vez por mensaje.

 151
Author: kanaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-11 01:31:24

WebSocket es básicamente un protocolo de aplicación (con referencia a la pila de red ISO/OSI), orientado a mensajes, que hace uso de TCP como capa de transporte.

La idea detrás del protocolo WebSocket consiste en reutilizar la conexión TCP establecida entre un Cliente y un Servidor. Después del apretón de manos HTTP, el Cliente y el Servidor comienzan a hablar del protocolo WebSocket intercambiando sobres WebSocket. HTTP handshaking se utiliza para superar cualquier barrera (por ejemplo, firewalls) entre Cliente y un servidor que ofrece algunos servicios (por lo general, el puerto 80 es accesible desde cualquier lugar, por cualquier persona). El cliente y el servidor pueden cambiar a través de HTTP hablando en cualquier momento, haciendo uso de la misma conexión TCP (que nunca se libera).

Detrás de escena WebSocket reconstruye los marcos TCP en sobres/mensajes consistentes. El canal full-duplex es utilizado por el servidor para enviar actualizaciones hacia el Cliente de forma asincrónica: el canal está abierto y el Cliente puede llamar a cualquier futures / callbacks / promises para gestionar cualquier mensaje recibido asincrónico de WebSocket.

En pocas palabras, WebSocket es un protocolo de alto nivel (como el propio HTTP) construido sobre TCP (capa de transporte confiable, por fotograma) que hace posible construir una aplicación efectiva en tiempo real con clientes JS (anteriormente se utilizaban técnicas Comet y long-polling para extraer actualizaciones desde el Servidor antes de que WebSockets se implementaran. Ver Stackoverflow post: Diferencias entre websockets y un largo sondeo para el servidor de juego basado en turnos).

 95
Author: Paolo Maresca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-16 05:08:50