javascript - websocket istemcisi büyük veri gönderirken bağlantıyı kesiyor


Nodejs websocket sunucum ve client'im var, resim göndermek için. Sorun şu ki, client yüksek çözünürlükteki [örneğin 512 x 512 veya daha fazla] veya büyük boyutlu [örneğin neredeyse > 50KB] resimleri gönderirken otomatik olarak bağlantıyı kesiyor.

Not: Daha küçük boyutlar ve ölçülerle gönderebiliyor.

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));
 }

İlgili HTML:

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

Soru

Görüntünün boyutu veya ölçüsü soket bağlantısının kesilmesinin bir nedeni midir?

Websocket mesajları için herhangi bir boyut sınırlaması var mı?

Cevap #1

Bu SSS’de açıklandığı gibi, bir WebSocket mesajının protokol seviyesinde boyut sınırlaması yoktur. Bununla birlikte, çoğu uygulamanın hafıza sorunları nedeniyle mesaj boyutu üzerinde kendi sınırı vardır. Bu nedenle, kullandığınız WebSocket uygulamasının belgelerine bakmalısınız.

Bu arada, WebSocket protokolü, performans cezasına sahip olan ve mesaj boyutunu artıran ikili-den-metin dönüşümü olmadan ikili mesajları doğrudan değiştirmeye olanak tanır.

Cevap #2

Buna bir çözüm buldum. Buradaki sorun veri boyutuyla ilgili. Web socket protokolünün mesaj boyutu üzerinde bir sınırı vardır. Uygulamadan önce RFC standartlarını takip etmek daha iyidir. Burada açıklanmıştır rfc6455#section-5.2