Búsqueda de sitios web

javascript - el cliente de websocket se desconecta al enviar datos grandes


Tengo un servidor y un cliente de WebSocket en Node.js para enviar imágenes. El problema es que el cliente se desconecta automáticamente al enviar imágenes de alta resolución [es decir, 512 x 512 o más] o de gran tamaño [es decir, casi > 50KB].

Nota: Con dimensiones y tamaño menores, es capaz de enviar.

function getBase64Image(img) {
  var canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;

  var ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0);

  var dataURL = canvas.toDataURL("image/png");
  return dataURL;
 }

function sendImage(){
  var img = getBase64Image(document.getElementById("image") );
  var JSONimg = {
   ' type' : 'img',
   'data' : img,
  }
 ws.send(JSON.stringify(JSONimg));
 }

HTML correspondiente:

 <button onclick="sendImage()">Send Image</button>
 <img id="image" src="img/image.png" alt="" />

Pregunta

¿Es el tamaño o la dimensión de la imagen una razón para la desconexión del socket?

¿Alguna limitación de tamaño para los mensajes de websocket?

Respuesta #1

Como se describe en esta sesión de preguntas y respuestas, un mensaje de WebSocket no tiene limitación de tamaño a nivel de protocolo. Sin embargo, la mayoría de las implementaciones tienen su propia limitación de tamaño de mensaje debido a problemas de memoria. Por lo tanto, deberías consultar la documentación de la implementación de WebSocket que uses.

Por cierto, el protocolo WebSocket permite intercambiar mensajes binarios directamente sin conversión de binario a texto, la cual tiene cierta penalización en el rendimiento además de aumentar el tamaño del mensaje.

Respuesta #2

Encontré la solución a esto. El problema aquí es con el tamaño de los datos. El protocolo WebSocket tiene su limitación en el tamaño del mensaje. Es mejor seguir los estándares RFC antes de la implementación. Explicado aquí rfc6455#section-5.2