websocket客户端在发送大数据时断开连接

时间:2015-03-26 18:22:32

标签: javascript node.js websocket

我有nodejs websocket服务器和客户端发送图像。问题是客户端在发送高分辨率[即512×512或更多]或大尺寸[即几乎>]时自动断开连接。 50KB]图像。

注意:尺寸和尺寸较小,可以发送。

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:

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

问题

图像的大小或尺寸是插座断开的原因吗?

websocket消息的任何大小限制?

2 个答案:

答案 0 :(得分:3)

我找到了解决方法。这里的问题是数据大小。 Web套接字协议有其对邮件大小的限制。在实施之前更好地遵循RFC标准。这里解释rfc6455#section-5.2

答案 1 :(得分:2)

this Q&A中所述,WebSocket消息在协议级别没有大小限制。然而,由于内存问题,大多数实现都对消息大小有自己的限制。因此,您应该查看您使用的WebSocket实现的文档。

BTW,WebSocket协议允许直接交换二进制消息而不进行二进制到文本转换,这会降低性能并增加消息大小。