Búsqueda de sitios web

javascript - Integridad de mensajes de Websockets


Al utilizar una conexión de datos de doble sentido WebSocket entre un cliente y un servidor, ¿tengo garantizado, al enviar dos mensajes desde el servidor, que recibiré esos dos mismos mensajes exactos en el cliente, algo que TCP no hace?

En otras palabras, si el servidor envía a su vez hello y luego its me, ¿el cliente siempre recibe dos mensajes que contienen hello y its me o es posible que el cliente reciba helloit y luego s me o incluso solo un mensaje como helloits me?

Respuesta #1

WebSocket originalmente tenía bytes de inicio y fin de mensaje de texto, pero esa es información antigua. Hay un componente de longitud en el enmarcado (dic 2011). Y por cierto, hay una bandera en la especificación de enmarcado que indica si el marco es el "mensaje" completo o un "fragmento de mensaje", es decir, hay otros marcos que conforman este "mensaje". Depende del receptor combinar los fragmentos correctamente para pasarlos al código de la aplicación. Normalmente no tienes que pensar en esto a menos que tengas "mensajes" muy grandes (piensa en los "mensajes" de WS como "datos" más que como verdaderos mensajes... WS no es realmente un protocolo de "mensajería" por sí mismo).

Pero ten en cuenta que WebSocket es un transporte de bajo nivel. Piensa en él como un TCP basado en la web. Los programadores de aplicaciones deberían usar protocolos de alto nivel "sobre WS/WSS" y no preocuparse por el orden, la reconexión, la presencia, pub/sub, tuple-spaces, entrega garantizada, etc., etc. Si no hacemos esto, se reinventarán docenas y docenas de protocolos de aplicación que tienen décadas de antigüedad.

Respuesta #2

Teniendo una conexión muy mala, es posible que pierdas un mensaje (sin embargo, debería reenviarse con TCP), pero es muy poco probable que se divida de esa manera. Cada mensaje de texto tiene límites: bytes de inicio (0x00) y de finalización (0xFF). El navegador no debería alterar los mensajes. Es probable que puedas recibir los mensajes en otro orden.

Cómo puedes estar más seguro:

  1. Agrega tus propias sumas de control a los mensajes (pero de hecho es una sobrecarga).
  2. Usa el protocolo wss (websockets+tls/ssl) - los mensajes corruptos no se descifrarían correctamente.