【问题标题】:websocket client disconnects on sending large datawebsocket客户端在发送大数据时断开连接
【发布时间】:2015-05-30 22:01:03
【问题描述】:

我有 nodejs websocket 服务器和客户端来发送图像。问题是客户端在发送高分辨率 [即 512 x 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 消息有大小限制吗?

【问题讨论】:

    标签: javascript node.js websocket


    【解决方案1】:

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

    【讨论】:

    • 什么是数据限制?例如 Json。
    【解决方案2】:

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

    顺便说一句,WebSocket 协议允许直接交换二进制消息,而无需进行二进制到文本的转换,这会降低性能并增加消息大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多