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

websocket client disconnects on sending large data

本文关键字:数据 断开 连接 客户端 websocket      更新时间:2023-09-26

我有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消息有大小限制吗?

如本问答中所述;A、 WebSocket消息在协议级别没有大小限制。尽管如此,由于内存问题,大多数实现对消息大小都有自己的限制。因此,您应该查看您使用的WebSocket实现的文档。

顺便说一句,WebSocket协议允许在没有二进制到文本转换的情况下直接交换二进制消息,这会带来一些性能损失,并增加消息大小。

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